就说我有
df1$name <- c('A','B','C','D','E')
df1$val <- c(1, 2, 3, 4, 5)和
df2$name <- c('A','B')
df2$val <-c(6,7)我想要计算df2 - df1 s.t.df3将成为
df3$name <- df2$name
df3$val <- df2$val-df1$val[df1$name==df2$name]并“匹配”这些名字,以便
df3$val<-c(6-1,7-2)将是输出。我试着这样做,但我不能得到正确的语法,提前感谢!
发布于 2021-06-04 02:44:41
我们可以使用连接
library(data.table)
setDT(df2)[df1, val := val - i.val, on = .(name)]数据
df1 <- data.frame(name = LETTERS[1:5], val = 1:5)
df2 <- data.frame(name = LETTERS[1:2], val = 6:7)发布于 2021-06-04 02:46:30
基数R:
### your starting data
df1 <- data.frame(name=c('A','B','C','D','E'), val=c(1, 2, 3, 4, 5))
df2 <- data.frame(name=c('A','B'), val=c('6','7'))
### fix strings-to-integers
df2$val <- as.integer(df2$val) # since we want to subtract
### merge and subtract
out <- merge(df1, df2, by = "name")
out$val <- out$val.y - out$val.x
out
# name val.x val.y val
# 1 A 1 6 5
# 2 B 2 7 5正如akrun开始的那样,这是一个合并/连接操作;有关这方面的讨论和示例,请参阅How to join (merge) data frames (inner, outer, left, right),https://stackoverflow.com/a/6188334/3358272。
https://stackoverflow.com/questions/67827084
复制相似问题