如何根据其他行的值填充缺失值?

3
country <- c("USA","UK","Egypt","Brazil","USA", "UK")
continent <- c("North America","Europe","Africa","South America", NA, NA)
data.frame(country, continent) 

我该如何根据前面的行自动填充最后两个NA,因为我们知道“美国”与“北美洲”相匹配,“英国”与“欧洲”相匹配?
我有一个大数据集,如果有许多NA值,那么在dplyr中找到快速处理方法将非常有帮助。
提前感谢您!
2个回答

3
我们可以通过fill进行分组
library(dplyr)
library(tidyr)
d1 %>% 
     group_by(country) %>% 
     fill(continent) %>% 
     ungroup

-输出
# A tibble: 6 x 2
  country continent    
  <chr>   <chr>        
1 USA     North America
2 UK      Europe       
3 Egypt   Africa       
4 Brazil  South America
5 USA     North America
6 UK      Europe     

非常感谢,感激您的回答。作为后续,如果不存在与“大陆”和“国家”对应的观测值,我该如何手动输入缺失值? - sergio_ag
@krmo,你可以使用complete函数来扩展数据以填补缺失的情况。 - akrun
我如何为特定行执行此操作?比如说,我想将“亚洲”添加到一行中,该行目前包含:“中国”,NA。再次感谢@akrun! - sergio_ag
@krmo,你有一个值为“亚洲”的情况是针对中国还是一个新条目? - akrun

2
我们可以使用zoo包中的na.locf函数:
library(dplyr)
library(zoo)
df1 %>% 
    mutate(id = row_number()) %>% 
    group_by(country) %>% 
    do(na.locf(.)) %>% 
    arrange(id) %>% 
    select(-id) %>% 
    ungroup

输出:

  country continent    
  <chr>   <chr>        
1 USA     North America
2 UK      Europe       
3 Egypt   Africa       
4 Brazil  South America
5 USA     North America
6 UK      Europe     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接