R:根据其他列在列中填写缺失值

时间:2020-01-27 20:07:10

标签: r dataframe missing-data data-cleaning data-munging

我有一个很大的数据集,其中每个邮政编码都有其对应的纬度和经度。在数据集中,缺少一些邮政编码。我需要根据缺少数据的相应纬度填写丢失的邮政编码。 在此示例中,我希望第4行和第5行的邮政编码分别插入a和b,因为它们的lat和long相同:

zipcode <- c("a","b","c","","")
lat <- c("1","2","3","1","2")
lon <- c("6","7","8","6","7")
data.frame(zipcode,lat,lon)
  zipcode lat lon
1       a   1   6
2       b   2   7
3       c   3   8
4           1   6
5           2   7

除非确实需要,否则我不想安装其他软件包。

谢谢

1 个答案:

答案 0 :(得分:1)

使用na_if中的dplyrzipcode列中的NA替换空白值,然后使用fill中的tidyr

library(dplyr)
library(tidyr)
df %>%
    group_by(lat, lon) %>% 
    mutate(zipcode = na_if(zipcode, "")) %>% 
    fill(zipcode)

#   zipcode lat   lon  
   #<fct>   <fct> <fct>
   #1 a       1     6    
   #2 b       2     7    
   #3 c       3     8    
   #4 a       1     6    
   #5 b       2     7