比较具有不同行数的data.frames

时间:2016-05-31 21:39:10

标签: r compare row add row-number

我有两个数据帧:

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&#39; s的缺失位置添加一行?

一旦我有两个矩阵,我会做(df1-df2)^ 2,然后是rowums方法。

总结一下:如何为每个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

1 个答案:

答案 0 :(得分:4)

正如李哲元在评论中所说,你可以使用每个df的merge()和第一列(POS)上另一个df的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