将 data.frames 与不同的行数进行比较
compare data.frames with different number for rows
我有两个数据框:
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
正如李哲元在评论中所说,您可以将每个 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
我有两个数据框:
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
正如李哲元在评论中所说,您可以将每个 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