【问题标题】:compare data.frames with different number for rows比较具有不同行数的data.frames
【发布时间】:2016-09-30 01:52:30
【问题描述】:

我有两个数据框:

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

【问题讨论】:

    标签: r compare row add row-number


    【解决方案1】:

    正如cmets中李哲元所说,您可以将每个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
    

    【讨论】:

    • 这适用于给定的示例,但是我很难将其实现到我的真实数据中。我收到与“BY”相关的错误。 Error in merge.data.table(mass, evo$POS, all = TRUE, by.x = "POS", by.y = 1) : A non-empty vector of column names are required for by.x and by.y.Error in merge.data.table(mass, evo$POS, all = TRUE, by = "POS") : Elements listed in by` 必须是 x 和 y 中的有效列名`
    • 你能解释一下你为什么选择by=1吗?我对merge()的理解是使用要使用的列名(即POS)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多