根据其他列中的唯一值用字符替换NA值

时间:2020-08-04 13:10:12

标签: r dataframe dplyr

情况:

我有一个很大的数据集,其中有一列用于国家代码(country),其旁边是一列具有国家名称(country_name)。我需要帮助,将country列中两个观察值的NA值替换为相应country_name列中的NA:

  1. EL
  2. 英国

EL应该在country_name列中包含希腊。 英国的country_name列中应包含英国。

我正在整理数据集,因此该解决方案将用于清理整个数据集。显然,我想保留其余的列,因为country列在country_name列中具有正确的信息。

可复制的数据:

    structure(list(country = c("EL", "EL", "EL", "EL", "EL", "UK", 
"UK", "UK", "UK", "UK"), country_name = c(NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), type = c("Conventional thermal", 
"Conventional thermal", "Conventional thermal", "Nuclear", "Nuclear", 
"Conventional thermal", "Conventional thermal", "Conventional thermal", 
"Nuclear", "Nuclear")), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

1 个答案:

答案 0 :(得分:2)

对于大型数据集,我建议使用映射文件:

country_map <- tibble(country = c("EL", "UK"), 
                      country_name2 = c("Greece", "United Kingdom"))

映射文件包含所有国家和相应的名称。 然后,您可以将映射文件加入数据中,并使用coalesce更新国家/地区名称。

data %>% left_join(country_map, by = "country") %>%
  mutate(country_name = coalesce(country_name, country_name2)) %>%
  select(-country_name2)