Применить переменную операцию, в зависимости от групп, используя tidyverse [R] - PullRequest
0 голосов
/ 11 апреля 2020

Я не совсем уверен, даже как гуглить мой вопрос, поэтому я думаю, что пример лучше всего объяснить, чего я хочу достичь. Таким образом, я хотел бы умножить каждое значение фрейма данных, сгруппированных по некоторой переменной, и значение умножения будет зависеть от того, к какой группе это относится. Я приведу пример:

    data <- data.frame(group = c("a", "b", "c"), value = c(1, 2, 3))
    multiplier <- c(a = 1, b = 2, c = 3)

    data %>% 
    group_by(group) %>%
    // Something that multiplies the value column by the corresponding multiplier contained in the vector

РЕДАКТИРОВАТЬ:

Ожидаемые возвращаемые значения для замены столбца значения должны быть 1, 4, 9 соответственно в порядке.

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Я думаю, что это должно сделать это:

library(dplyr)
data %>%
    mutate(value = value * multiplier[as.character(group)])
#  group value
#1     a     1
#2     b     4
#3     c     9

В качестве альтернативы, вы можете добавить multiplier в виде столбца data и затем вычислить.

data %>%
    mutate(mutiplier = multiplier[as.character(group)]) %>%
    mutate(new.value = value * multiplier)
#  group value mutiplier new.value
#1     a     1         1         1
#2     b     2         2         4
#3     c     3         3         9
0 голосов
/ 12 апреля 2020

В base R мы можем сделать

transform(merge(data, stack(multiplier), by.x = 'group', by.y = 'ind'),
        value = value * values)[-3]
#   group value
#1     a     1
#2     b     4
#3     c     9
...