r - 使用来自另一个 data.frame 的数据和条件修改 data.frame 列

标签 r dplyr data.table

我有 2 个 data.frames

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,我想用 df2$num 中的值替换 df$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 的更优雅的方法?

最佳答案

您可以结合使用 left_joindplyr 中的 mutate

编辑

library(dplyr)

df3 <- df %>% 
  left_join(df2,  by = "addr") %>% 
  mutate(num = ifelse(.$num.y %in% df2$num, .$num.y, df$num)) %>% 
  select(addr, num)

df3
# addr num
#1    a 100
#2    b 200
#3    c   3
#4    d 500

旧答案

 df3 <- df %>% 
      mutate(num = ifelse(addr %in% df2$addr, df2$num, num))

df3
#  addr num
#1    a 100
#2    b 200
#3    c   3
#4    d 100

关于r - 使用来自另一个 data.frame 的数据和条件修改 data.frame 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50795137/

相关文章:

r - 日期时间对象到分钟 : I need 3 packages

r - dplyr 根据具有不同后缀的其他列进行变异

r - dplyr mutate 函数以垂直评估列(当前、上一个、下一个)内的值

r - 如何在匹配 R 中的其他列时将特定值从一个数据列复制到另一个数据列?

r - 创建带有湖泊的西类牙 map

r - 文本未出现在 XTS 图上

r - 使用 tostring 聚合字符串并在 r 中对它们进行计数

r - 将列表列中的值分派(dispatch)到单独的列

r - 如何通过变量将列名传递给 data.table 中的函数?

r - ggplot 结合了 R 中某些因子水平的 stat_smooth