需要在r中进行和INDEX和MATCH功能

时间:2015-02-01 00:06:43

标签: r

我对如何处理这个问题并提出问题感到有点失落。我基本上想在R中执行INDEXMATCH函数,然后将两个数相乘。

这是一个例子。我有两张不同尺寸的桌子。请注意行和列的差异。

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))

提前致谢。

1 个答案:

答案 0 :(得分:2)

以下是使用dplyrtidyr的策略。

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()将它们重新整形为长格式,然后我们可以合并它们以获得重叠的分类/观察。然后我们对转换进行了修改,最后我们重新变换为宽格式。