首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并2R数据,将匹配行与第2数据保持一致,从第1数据合并为非匹配行

合并2R数据,将匹配行与第2数据保持一致,从第1数据合并为非匹配行
EN

Stack Overflow用户
提问于 2021-03-28 18:14:38
回答 2查看 526关注 0票数 1

我想通过以下列方式匹配id列来合并2个数据格式

代码语言:javascript
复制
dfmain = 
  id  name val res
1  1    a    
2  2    b    
3  3    c    
4  4    d    
5  5    e   

代码语言:javascript
复制
dfsub = 
  id name  val    res
1  2 two   true   thanks
2  4 four  false  Sorry

要获得

代码语言:javascript
复制
dfmain =
   id  name  val    res
1:  1  a      
2:  2  two   true   thanks
3:  3  c      
4:  4  four  false  Sorry
5:  5  e      

请注意-

  1. 两个数据格式中的列在编号和名称上保持不变,在第二个数据文件中的id值将始终是第一个dataframe

中的一个子集。

目前,我正在使用anti_join函数获取第一个dataframe中不匹配的行,并将第二个dataframe连接到这些行。

是否有更有效的方法来做到这一点?

尝试从setDT库中使用data.table,但每次只能更新一个列的值。

对不起,如果我错过了任何明显的解决方案,因为我是新的R,任何帮助将不胜感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-28 18:40:58

我希望这是你的想法,否则请告诉我。我注意到,您只通过保留dfsub的列,将dfmain中的行替换为dfsub中相同id的行,因此,下面是我认为可以让您得到想要的内容的方法:

代码语言:javascript
复制
library(dplyr)

dfmain <- tribble(
    ~id,  ~name, ~ val, ~ res,
  1,    "a",    NA,     NA,
  2,    "b",    NA,     NA,
  3,    "c",    NA,     NA,
  4,    "d",    NA,     NA,
  5,    "e" ,   NA,     NA
)

dfsub <- tribble(
    ~id, ~name,  ~val,    ~res,
  2, "two",   TRUE,   "thanks",
  4 ,"four",  FALSE,  "Sorry"
)

dfmain %>%
  filter(! id %in% dfsub$id) %>%
  bind_rows(dfsub) %>%
  arrange(id)

# A tibble: 5 x 4
     id name  val   res   
  <dbl> <chr> <lgl> <chr> 
1     1 a     NA    NA    
2     2 two   TRUE  thanks
3     3 c     NA    NA    
4     4 four  FALSE Sorry 
5     5 e     NA    NA  
票数 0
EN

Stack Overflow用户

发布于 2021-03-28 19:36:43

你可以试试( @Anoushiravan R.感谢数据)

代码语言:javascript
复制
library(data.table)
library(dplyr)

setDT(dfsub)[setDT(dfmain),
  on = "id"
][,
  names(dfmain),
  with = FALSE
][
  ,
  Map(coalesce, .SD, dfmain)
]

这给

代码语言:javascript
复制
   id name   val    res
1:  1    a    NA   <NA>
2:  2  two  TRUE thanks
3:  3    c    NA   <NA>
4:  4 four FALSE  Sorry
5:  5    e    NA   <NA>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66844659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档