为了账号安全,请及时绑定邮箱和手机立即绑定

R中的条件合并/替换

R中的条件合并/替换

达令说 2019-08-19 16:52:42
R中的条件合并/替换我有两个数据框:df1x1  x21   a2   b3   c4   d和df2x1  x22   zz3   qq我想根据df1 $ x1和df2 $ x2之间的条件匹配,用df2 $ x2中的值替换df1 $ x2中的某些值,以产生:df1x1  x21   a2   zz3   qq4   d
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

第一部分是好的,但是在非唯一值的情况下df1,行式for循环在大型data.frames上不能很好地扩展。


您可以使用data.table“更新连接”进行适当的修改,这将非常快:


library(data.table)

setDT(df1); setDT(df2)

df1[df2, on = .(x1), x2 := i.x2]

或者,假设您不关心维护行顺序,您可以使用SQL启发dplyr:


library(dplyr)

union_all(

  inner_join( df1["x1"], df2 ), # x1 from df1 with matches in df2, x2 from df2

  anti_join(  df1, df2["x1"] )  # rows of df1 with no match in df2

) # %>% arrange(x1) # optional, won't maintain an arbitrary row order

这些中的任何一个都比行式for-loop更好地扩展。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 795 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信