Я создал небольшой пример, который, надеюсь, поможет.
Некоторые вещи, которые следует учитывать:
Левая часть аргумента в case_when()
должна быть логическим утверждением (т. Е. TRUE
или FALSE
result ). Используемая вами функция str_subset()
возвращает строки, соответствующие вашему условию, а не логические. В моем примере ниже я использую str_starts()
, который возвращает логическое значение, соответствующее условию ввода.
Значения NULL игнорируются в case_when()
, но вы также можете указать, что с ними делать, если хотите. Проверьте документацию ?case_when
для примера этого.
Удачи и добро пожаловать в R!
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(stringr)
# create data frame with countries, include NA for demonstration
df <- tibble(
country = c("Columbia", "Uruguay", "Argentina", "Brazil", NA)
)
df2 <-
df %>%
mutate(
starts_vowel =
case_when(
# left hand side of case_when must be a logical
str_starts(country, "A|E|I|O|U") ~ 1,
#Adding negate = TRUE returns non-matching
str_starts(country, "A|E|I|O|U", negate = TRUE) ~ 0,
)
)
df2
#> # A tibble: 5 x 2
#> country starts_vowel
#> <chr> <dbl>
#> 1 Columbia 0
#> 2 Uruguay 1
#> 3 Argentina 1
#> 4 Brazil 0
#> 5 <NA> NA
# Check out the difference between str_subset and #str_starts
str_subset(df$country, "^[A|E|I|O|U]")
#> [1] "Uruguay" "Argentina"
str_starts(df$country, "A|E|I|O|U")
#> [1] FALSE TRUE TRUE FALSE NA
Создано в 2020-02-24 с помощью пакета prepx (v0.3.0)