2016-05-31 67 views
-1

不同數量data.frames我有兩個dataframes:比較的行

df1<- data.frame(POS=c(1, 2, 3, 4, 5), 
      A=c(0.2,0,0,0.8,0), 
      G=c(0,0.3,0,0.2,0.5), 
      T=c(0.4,0.7,1,0,0.5), 
      C=c(0.4,0,0,0,0)) 

df2<- data.frame(POS=c(1, 3, 4, 5, 6), 
      A=c(0.3,0,0.6,0,0), 
      G=c(0,0,0.4,0.7,1), 
      T=c(0.2,1,0,0.3,0), 
      C=c(0.5,0,0,0,0)) 

我想獲得每個POS求和平方差

我首先需要的是兩個矩陣相同的尺寸。如何爲填充0的缺失位置添加一行?

一旦我有兩個矩陣,我會做(df1-df2)^ 2,然後是rowsums方法。

總結:如何爲每個data.frame中缺失的行添加一個填充了零的新行?

這樣的:

POS A G T C 
1 0.2 0.0 0.4 0.4 
2 0.0 0.3 0.7 0.0 
3 0.0 0.0 1.0 0.0 
4 0.8 0.2 0.0 0.0 
5 0.0 0.5 0.5 0.0 
6 0.0 0.0 0.0 0.0 

POS A G T C 
1 0.3 0.0 0.2 0.5 
2 0.0 0.0 0.0 0.0 
3 0.0 0.0 1.0 0.0 
4 0.6 0.4 0.0 0.0 
5 0.0 0.7 0.3 0.0 
6 0.0 1.0 0.0 0.0 

回答

3

正如評論所說的李宋哲元,您可以使用每個merge() DF與其他DF一個的第一列(POS)的POS列。這增加了缺少填充有NA行這樣你就必須用零來填補他們:

df1 <- merge(df1, df2$POS, all = TRUE, by=1) 
df1[is.na(df1)] <- 0 
df1 
    POS A G T C 
1 1 0.2 0.0 0.4 0.4 
2 2 0.0 0.3 0.7 0.0 
3 3 0.0 0.0 1.0 0.0 
4 4 0.8 0.2 0.0 0.0 
5 5 0.0 0.5 0.5 0.0 
6 6 0.0 0.0 0.0 0.0 

df2 <- merge(df2, df1$POS, all = TRUE, by=1) 
df2[is.na(df2)] <- 0 
df2 
    POS A G T C 
1 1 0.3 0.0 0.2 0.5 
2 2 0.0 0.0 0.0 0.0 
3 3 0.0 0.0 1.0 0.0 
4 4 0.6 0.4 0.0 0.0 
5 5 0.0 0.7 0.3 0.0 
6 6 0.0 1.0 0.0 0.0 
+0

這個工程實施到我的真實數據給出的這個,但是我有困難的例子。我收到與'BY'有關的錯誤。 'merge.data.table(mass,evo $ POS,all = TRUE,by.x =「POS」,by.y = 1)中的錯誤: by.x需要列名稱的非空向量和by.y.' 或'merge.data.table中的錯誤(mass,evo $ POS,all = TRUE,by =「POS」): 'by'中列出的元素必須是x和y中的有效列名' –

+0

你能解釋一下爲什麼選'by = 1'嗎? 我對merge()的理解是使用列名來使用(即POS) –