我有以下示例数据:
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)
连接两个数据框并将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)
使用data.table
library(data.table)
setDT(data_1)[data_2, result := value * var, on = .(ID)]