根据一组字符串条件创建一个新列

问题描述

我在许多国家/地区都有此专栏。

countries <- c(Germany,France,Japan,China,Angola,Nigeria)

我想创建一个新的列,称为大洲,对这些地方进行汇总。例如,我尝试了此操作,但没有成功:

if (countries == "Germany" | "France" {
   countries$continents <- "Europe"
 } else if (countries == "Japan"  |"China") {
   countries$continents <- "Asia"
 } else if (countries == "Angola"  |"Nigeria") {
   countries$continents <- "África" 

但是R一直在说我不允许比较字符串。 也许dplyr可能有一个聪明的解决方案,但是任何解决方案都值得欢迎。我该怎么做?

解决方法

@markus指出使用%in%

您可以使用dplyr

尝试此操作

library(dplyr)

df <- data.frame(countries = c("Germany","France","Japan","China","Angola","Nigeria"))



df1 <- 
  df %>% 
  mutate(continent = case_when(countries %in% c("Germany","France") ~ "Europe",countries %in% c("Japan","China") ~ "Asia",countries %in% c("Angola","Nigeria") ~ "Africa"))

但是使用countrycode包可能会更整洁,再次由@markus指出

library(countrycode)

df_continents <- 
  codelist %>% 
  select(country.name.en,continent)

df2 <- 
  df %>% 
  left_join(df_continents,by = c("countries" = "country.name.en"))

df2

#>   countries continent
#> 1   Germany    Europe
#> 2    France    Europe
#> 3     Japan      Asia
#> 4     China      Asia
#> 5    Angola    Africa
#> 6   Nigeria    Africa

reprex package(v0.3.0)于2020-09-18创建