我想将两个长度不等的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中执行此操作?
我尝试使用匹配功能无效,我尝试使用数组也只会导致错误。
答案 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)