条件相乘两个数据帧

时间:2018-10-19 22:07:49

标签: r conditional product

我想知道如何根据匹配条件将两个数据帧整齐地相乘。例如:

df1 <- data.frame(c1 = letters[seq(1,5)], c2 = seq(1,5), c3 = seq(31,35), c4 = seq(41,45))

df1
   c1 c2 c3 c4
1  a  1 31 41
2  b  2 32 42
3  c  3 33 43
4  d  4 34 44
5  e  5 35 45

df2 <- data.frame(c1 = letters[seq(5,1)], c2 = seq(11,15), c3 = seq(21,25), c4 = seq(1,5))

df2
   c1 c2 c3 c4
1  e 11 21  1
2  d 12 22  2
3  c 13 23  3
4  b 14 24  4
5  a 15 25  5

我想产生第三个数据框,如下所示:

df3 <- data.frame(c1 = letters[seq(1,5)], c2 = c(15,28,39,48,55), c3 = c(775,768,759,748,735), c4 = c(205,168,129,88,45))

df3
  c1 c2  c3  c4
1  a 15 775 205
2  b 28 768 168
3  c 39 759 129
4  d 48 748  88
5  e 55 735  45

也就是说,我要在两个数据帧中匹配作为我标准的第一列(c1),然后将相应的元素相乘,例如:将df1中的“ b”与df2中的“ b”匹配,然后然后,对于每一列,将对应的元素乘以2 * 14 = 28(对于c2);对于c3,32 * 24 = 768;对于c4,则为42 * 4 = 168。

有没有一种干净的方法可以做到这一点?我在任何地方都找不到。

1 个答案:

答案 0 :(得分:0)

将两个数据框的第一列合并,然后将合并的数据框的第一列绑定到所需乘积。最后设置名称。

m <- merge(df1, df2, by = 1)
mm <- cbind(m[1], m[2:4] * m[5:7])
names(mm) <- names(df1)

给予:

> mm
  c1 c2  c3  c4
1  a 15 775 205
2  b 28 768 168
3  c 39 759 129
4  d 48 748  88
5  e 55 735  45