2012-04-27 149 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" 
相關問題