R 用id替换另一个数据帧中的NA值
我有一个数据帧df1,如下所示-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
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