2012-04-27 155 views
8

我很难在另一个数据帧的底部添加一个数据帧。将一个数据帧添加到R中另一个数据帧的末尾

我有一个数据框(我们称之为DF1)有1行5列。我有另一个数据框(让我们称之为DF2)有50行和5列。我将它设置为使得两个数据框之间的列匹配 - 它们具有相同的列。实际上,DF1是基于DF2的计算。

这是DF1样子:

row.names  pt1  pt2  pt3  pt4 
    calc   0.93 0.45 0.28 0.54 

这是DF2的样子:

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 

DF1应该是实际的数据点的数量(#值,也就是不会丢失)除以可能值的总数。

所以..我想DF1添加到DF2的底部看起来像这样:

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 
    calc   0.93 0.45 0.28 0.54 

,当我试图使用

both.dfs <- rbind(DF1, DF2) # DF1 is first here 

DF1是DF2的第一行。我需要它是最后一排。

,当我试图使用

both.dfs <- rbind(DF2, DF1) # DF2 is first here 

我得到一个错误:

Warning messages: 
1: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
2: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
3: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
4: In `[<-.factor`(`*tmp*`, iseq, value = 0.74) : 
    invalid factor level, NAs generated 

我试图合并,我已经尝试添加一个新行DF2,然后在值胶层DF2..nothing似乎工作!我迫切需要一些帮助!任何人?

+0

简短的回答是,你不能(或者至少你不应该“T)。数据帧的列必须都是原子向量(即相同的数据类型),并且您试图混合使用数字(DF1)和字符/因子(DF2)。 – joran 2012-04-27 22:30:07

+0

如果DF2的列是字符而不是因素,它将“工作”。但你仍然应该找到一种不同的方式来链接这些数据集。 – joran 2012-04-27 22:34:24

回答

6

这里是你应该做的:

DFtranspose <- cbind(t(DF1[2, ]), t(DF2)) 
rownames(DFtranspose) <- DF1[1, ] 
3

我同意评论,这可能是一个坏主意,但这里是你如何做到这一点。

首先,基于列表的data.frame不会以这种方式很好地结合。如果你想破解数据,你最好将它们转换为矩阵。请注意,您将不得不为数据框的每一行选择单一类型,因此如果数字绑定到字符,则不能将数字保留为数字。如果你愿意把一切都为一个字符,这给一展身手:

> df1 <- data.frame(pt1="a", pt2="b", row.names=1) 
> rownames(df1) <- "e" 
> df2 <- data.frame(letters[1:4], pt1=1:4, pt2=2:5, row.names=1) 
> rbind(as.matrix(df2), as.matrix(df1)) 
    pt1 pt2 
a "1" "2" 
b "2" "3" 
c "3" "4" 
d "4" "5" 
e "a" "b" 
相关问题