首页 文章

如何在多行和多列的不同数据框中找到两个值之间的差异?

提问于
浏览
0

我有两个数据帧:

DF1:

WAV    UV     VIOLET    BLUE
sD1    10.8   10.1      23.5
sA4    6.2    8.2       19.9
sA1    8.3    11.7      28.6
sC2    7.9    8.2       31.0
sC3    10.7   9.5       18.1

DF2:

ID    UV     VIOLET    BLUE
D1    7.9    10.1      19.3
D2    7.0    9.2       15.9
D3    21.4   20.7      27.4
D4    10.3   8.9       20.9
D5    21.7   16.5      21.3

我想找到df2中D1列的总和与df1中每行的列之间的差异,并在新的数据帧中生成此输出 . 然后,对于df2的D2,需要对每行df1重复这一过程,依此类推 . 每行的总和之间的每个新差异应该是新数据帧的单独条目,并且df2的差异行的每个列表应该是输出中的新行 . 所以输出应该如下所示:

D1    sum(D1)-sum(sD1)  sum(D1)-sum(sA4)  sum(D1)-sum(sA1)  sum(D1-sC2)  sum(D1)-sum(sC3)
D2    sum(D2)-sum(sD1)  sum(D2)-sum(sA4)  sum(D2)-sum(sA1)  sum(D2-sC2)  sum(D2)-sum(sC3)
D3    sum(D3)-sum(sD1)  sum(D3)-sum(sA4)  sum(D3)-sum(sA1)  sum(D3-sC2)  sum(D3)-sum(sC3)
D4    sum(D4)-sum(sD1)  sum(D4)-sum(sA4)  sum(D4)-sum(sA1)  sum(D4-sC2)  sum(D4)-sum(sC3)
D5    sum(D5)-sum(sD1)  sum(D5)-sum(sA4)  sum(D5)-sum(sA1)  sum(D5-sC2)  sum(D5)-sum(sC3)

我愿意接受任何建议 .

1 回答

  • 0

    以下是三种方式,@ Onyambu在评论中已经提到过两种方式 . 其中, outer 选项似乎是最快的 .

    outer(rowSums(df1[,-1]), rowSums(df2[,-1]), "-")
    

    要么

    sapply(rowSums(df1[-1]),"-",rowSums(df2[-1]))
    

    要么

    sapply(rowSums(df1[,-1]), function(x) x - rowSums(df2[,-1]))
    

    例如,您可以这样做:

    df <- data.frame(outer(rowSums(df1[,-1]), rowSums(df2[,-1]), "-"))
    colnames(df) <- df1$WAV
    rownames(df) <- df2$ID
    

相关问题