我有两个数据帧:
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)
我对任何建议持开放态度。
答案 0 :(得分: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