我对如何处理这个问题并提出问题感到有点失落。我基本上想在R中执行INDEX
和MATCH
函数,然后将两个数相乘。
这是一个例子。我有两张不同尺寸的桌子。请注意行和列的差异。
MASS = data.frame(taxa = c("a","b","c"), s1 = c(1,1,1), s2 = c(2,2,2), s3 = c(3,3,3))
DATA = data.frame(taxa = c("b","c"), s1 = c(1,0), s3 = c(4,6))
我需要将DATA表中的单元格与MASS表格中的相应单元格(例如DATA cell "b:s3" * MASS cell "b:s3"
)复用,并将结果输出到新表格。以下是期望的结果。
RESULT = data.frame(taxa = c("b","c"), s1 = c(1,0), s3 = c(12,18))
提前致谢。
答案 0 :(得分:2)
以下是使用dplyr
和tidyr
的策略。
library(dplyr)
library(tidyr)
merge(gather(MASS, obs, val1, -taxa), gather(DATA, obs, val2, -taxa)) %>%
mutate(val=val1*val2) %>%
select(taxa,obs,val) %>%
spread(obs, val)
返回
taxa s1 s3
1 b 1 12
2 c 0 18
我们在两个输入data.frames上使用gather()
将它们重新整形为长格式,然后我们可以合并它们以获得重叠的分类/观察。然后我们对转换进行了修改,最后我们重新变换为宽格式。