Умножение нескольких столбцов в кадре данных на определенные c значения из другого кадра данных - PullRequest
2 голосов
/ 27 мая 2020

Подумайте о следующих двух фреймах данных

df1 <- data.frame(a = rep(1, 10), b = rep(1, 10), c = rep(1, 10))
df2 <- data.frame(company = c("a", "b", "c"), weight = c(5, 10, 20))

df1

   a b c
1  1 1 1
2  1 1 1
3  1 1 1
4  1 1 1
5  1 1 1
6  1 1 1
7  1 1 1
8  1 1 1
9  1 1 1
10 1 1 1

df2

  company weight
1       a      5
2       b     10
3       c     20

Теперь я ищу решение, которое ищет имена столбцов df1 в столбце компании df2 и умножает каждую строку соответствующей компании в df1 со значением из столбца веса.

Итак, чего я хочу достичь:

df.weighted

   a.weighted b.weighted c.weighted
1           5         10         20
2           5         10         20
3           5         10         20
4           5         10         20
5           5         10         20
6           5         10         20
7           5         10         20
8           5         10         20
9           5         10         20
10          5         10         20

Есть ли у кого-нибудь идея?

Спасибо!

1 Ответ

4 голосов
/ 27 мая 2020

Мы можем сделать длину обоих наборов данных одинаковой и умножить

out <- setNames(df2$weight, df2$company)[col(df1)] * df1
names(out) <- paste0(names(out), ".weighted")

Или другой вариант:

df1 * split(df2$weight, df2$company)[names(df1)]

Или с match

df2$weight[match(names(df1), df2$company)][col(df1)] * df1

Или используя sweep

sweep(df1[df2$company],  2, FUN = `*`, df2$weight)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...