Условное умножение двух кадров данных - PullRequest
0 голосов
/ 20 октября 2018

Я хотел бы знать, как я могу аккуратно умножить два кадра данных, основываясь на условии соответствия.Например:

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), который является моимкритерии, в двух кадрах данных, а затем умножьте соответствующие элементы, например: сопоставьте «b» в df1 с «b» в df2, а затем, для каждого столбца, умножьте соответствующие элементы - 2 * 14 = 28 для c2;32 * 24 = 768 для с3;и 42 * 4 = 168 для c4.

Есть ли чистый способ сделать это?Я не нашел это нигде.

1 Ответ

0 голосов
/ 20 октября 2018

Объедините два фрейма данных по первым столбцам, а затем привяжите первый столбец объединенного фрейма данных к требуемому продукту.Наконец, установите имена.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...