У меня есть следующие данные для примера.

data_1 <- data.frame("ID" = c('a','b','c','d','e'),
                 "value" = c(2,4,9,5,3))

data_2 <- data.frame("ID" = c('a','c','d','b','e','a','e','d','c'),
                     'var' =c(2,6,2,4,6,8,6,4,5))

Я хочу вычислить новый столбец в data_2 так, чтобы для одного и того же ID в двух наборах данных умножались value и var.

Что-то вроде для data_1$ID==data_2$ID, затем data_1$value*data_2$var. Так что newVar будет (4,54,10,16,18,16,18,20,45).

r
1
Sphinx 2 Мар 2021 в 13:42

1 ответ

Лучший ответ

Соедините два фрейма данных и умножьте value и var.

transform(merge(data_1, data_2, by = 'ID'), result = value * var)

Вы также можете использовать match:

transform(data_2, result = var * data_1$value[match(ID, data_1$ID)])

#  ID var result
#1  a   2      4
#2  c   6     54
#3  d   2     10
#4  b   4     16
#5  e   6     18
#6  a   8     16
#7  e   6     18
#8  d   4     20
#9  c   5     45

Использование dplyr:

library(dplyr)
inner_join(data_1, data_2, by = 'ID') %>% mutate(result = value * var)
1
Ronak Shah 2 Мар 2021 в 10:44