用另一个数据集中的数据替换 NA 值

问题描述 投票:0回答:1

我有这个数据集,这是一个例子:

df1

State    Year   ColA   ColB ColC 
OH         2000   200   190  180
OH         2002   218   200  176
OH         2010   218   205  185
KY         2000   200   190  NA
KY         2002   218   200  NA
KY         2010   218   205  NA
PA         2000   200   190  180
PA         2002   214   200  178
PA         2010   219   205  185
MI         2000   200   190  NA
MI         2002   218   200  NA
MI         2010   218   205  NA

如您所见,我在 ColC 中缺少一些值。我在不同的数据集中有这些值:

df2

 State    Year   ColB ColC_Fill
 KY        2000   180  200
 KY        2002   176  210
 KY        2010   185  211
 MI        2000   200  211   
 MI        2002   200  206   
 MI        2010   200  205   

我想要这个:

df1

State    Year   ColA   ColB ColC 
OH         2000   200   190  180
OH         2002   218   200  176
OH         2010   218   205  185
KY         2000   200   190  200
KY         2002   218   200  210
KY         2010   218   205  211
PA         2000   200   190  180
PA         2002   214   200  178
PA         2010   219   205  185
MI         2000   200   190  211
MI         2002   218   200  206
MI         2010   218   205  205

我想用 df2 中的值来填充 df1 中的缺失值。我已经尝试过这段代码:

 df$ColC[is.na(df$ColC)]<-left_join(df1[,c(1:2,5)], df2[,c(1:2,4)])

这段代码几天前似乎可以工作,但是当我昨天再次尝试时,它正在用所有变量的列表替换 ColC。我已经尝试了几次迭代,但没有运气。任何帮助,将不胜感激!预先感谢。

dplyr merge tidyverse na missing-data
1个回答
0
投票

条条大路通罗马。这是一个潜在的解决方案:

dataset1 <- dataset1 %>% left_join(dataset2 %>% select(State, Year, ColC_Fill), by = c("State", "Year")) %>% mutate(ColC = ifelse(is.na(ColC), ColC_Fill, ColC)  ) %>% select(-ColC_Fill)   

首先,我从 dataset2 中按名称选择相关列。然后我在

left_join()
上做一个
"State", "Year"
。第三,我将 ColC 替换为 ColC_fill,其中 ColC 是
NA
。最后,我放弃了 ColC_Fill,因为不再需要它了。

© www.soinside.com 2019 - 2024. All rights reserved.