在R中有条件地乘以数据帧

时间:2011-04-26 17:10:01

标签: r dataframe multiplication

我想将两个长度不等的data.frames相乘 如果我有一个观察数据框(实际上这是大约30000个条目)

Species    number
1          3
1          3
3          5
4          40
5          22

和第一个数据框中存在的每个物种的转换率的另一个数据框(这个数据只有大约120个条目)

species    conversion ratio
1          3
2          5
3          4
4          2
5          2

我希望将每个数字列条目乘以与该种类关联的转换比率条目,我该如何在R中执行此操作?

我尝试使用匹配功能无效,我尝试使用数组也只会导致错误。

2 个答案:

答案 0 :(得分:4)

请参阅?merge。假设你有species一致命名(大写):

df3 <- merge(df1,df2)
df3$number*df3$conversion.ratio

答案 1 :(得分:3)

您可以合并两个数据框。

## Your example data
df.number <- matrix(c(1, 1, 3, 4, 5, 3, 3, 5, 40, 22), ncol = 2)
colnames(df.number) <- c("species", "number")
df.ratio <- matrix(c(1, 2, 3, 4, 5, 3, 5, 4, 2, 2), ncol = 2)
colnames(df.ratio) <- c("species", "ratio")

## Merge the two matrices
dat <- merge(df.number, df.ratio, by = "species")

## Multiply for your result
result <- with(dat, number * ratio)

修改

@Frank:在你对James的评论中,你说合并后得到的数据框太长了。你的意思是你想要删除重复的行?如果是这样的话:

dat2 <- subset(dat, subset = !duplicated(dat))
result2 <- with(dat2, number * ratio)