R 用id替换另一个数据帧中的NA值

R 用id替换另一个数据帧中的NA值,r,dataframe,R,Dataframe,我有一个数据帧df1,如下所示- ID Count 11 345 22 456 33 786 44 765 55 NA 66 888 77 NA 然后我有一个df2,如下所示- ID Count 11 536 22 654 33 786 44 999 55 890 66 111 77 654 对于那些特定id,我希望将df1中的NA值替换为df2中的值 产生的df3应为: ID Count 11 345 22 456 33 786

我有一个数据帧df1,如下所示-

ID Count 
11  345
22  456
33  786
44  765
55  NA
66  888
77  NA
然后我有一个df2,如下所示-

 ID  Count 
 11  536
 22  654
 33  786
 44  999
 55  890
 66  111
 77  654
对于那些特定id,我希望将
df1
中的
NA
值替换为
df2
中的值

产生的
df3
应为:

ID  Count 
11  345
22  456
33  786
44  765
55  890
66  888
77  654
任何帮助都会很好
感谢使用dplyr

library(dplyr)

df1 %>%
  left_join(df2, by = c("ID")) %>%
  mutate(Count = ifelse(is.na(Count.x), Count.y, Count.x)) %>%
  select(-c(Count.x, Count.y))
这就产生了

  ID Count
1 11   345
2 22   456
3 33   786
4 44   765
5 55   890
6 66   888
7 77   654

可以使用更新联接编辑第一个表中的行:

library(data.table)
setDT(DF1); setDT(DF2)

DF1[is.na(Count), Count := DF2[.SD, on=.(ID), x.Count]]
工作原理

  • DF[i,j]
    i
    过滤,然后执行
    j
  • 因此在
    j
    中,
    .SD
    是指使用
    i
  • 带有
    :=
    j
    添加或修改表中的列
  • x[i,on=,x.v]
    is

使用
dplyr::coalesce
将使任务更简单

library(dplyr)

df1 %>% inner_join(df2, by= "ID") %>%
  mutate(Count = coalesce(Count.x, Count.y)) %>%
  select(ID, Count)

#   ID Count
# 1 11   345
# 2 22   456
# 3 33   786
# 4 44   765
# 5 55   890
# 6 66   888
# 7 77   654
数据:

df1 <- read.table(text = 
"ID Count 
11  345
22  456
33  786
44  765
55  NA
66  888
77  NA",
header = TRUE)

df2 <- read.table(text = 
"ID  Count 
11  536
22  654
33  786
44  999
55  890
66  111
77  654",
header = TRUE)
df1