【发布时间】:2018-11-20 13:13:27
【问题描述】:
我有 2 个数据帧
df <- data.frame(addr=c('a','b','c','d'), num = c(1,2,3,4))
> df
addr num
1 a 1
2 b 2
3 c 3
4 d 4
df2 <- data.frame(addr=c('a','b','d'), num=c(100,200,500))
> df2
addr num
1 a 100
2 b 200
3 d 500
如果条件 df$addr 与 df2$addr 匹配,我想将 df$num 中的值替换为 df2$num 中的值。我设法用下面的代码得到了这个
df[,"num"] <- sapply(df[,"addr"], function(x) ifelse(x %in% df2$addr,df2$num[match(x,df2$addr)],df[df$addr==x,]$num))
> df
addr num
1 a 100
2 b 200
3 c 3
4 d 500
我想知道是否有更优雅的方法使用 dplyr 或 data.table?
【问题讨论】:
-
在这里使用 data.table 是一种解决方案 setDT(df)[df2, num := ifelse(addr %in% i.addr ,i.num, num), on = "addr"]
标签: r dplyr data.table