Использование str_subset с case_when в mutate? - PullRequest
0 голосов
/ 24 февраля 2020

У меня возникли проблемы с использованием case_when в mutate для указания указанного c условия. Я пытаюсь создать новый столбец с названием «обработка», в котором, если название страны (в названии столбца) начинается с гласной, в столбце обработки отображается «1». Если название страны не начинается с гласной, я хочу, чтобы в колонке обращения было написано «0». Я попробовал несколько вещей здесь, но, похоже, ничего не работает.

mutate("treatment" = 
        case_when
        (str_subset(name, pattern = "^[AEIOU]")) ~"1", 
         str_subset(name, pattern = "[^AEIOU]") ~ "0")

Текущее сообщение об ошибке гласит: Ошибка: Столбец treatment имеет неподдерживаемый тип цитируемого вызова.

Если кто-то может помочь, я был бы очень признателен!

1 Ответ

3 голосов
/ 24 февраля 2020

Я создал небольшой пример, который, надеюсь, поможет.

Некоторые вещи, которые следует учитывать:

  1. Левая часть аргумента в case_when() должна быть логическим утверждением (т. Е. TRUE или FALSE result ). Используемая вами функция str_subset() возвращает строки, соответствующие вашему условию, а не логические. В моем примере ниже я использую str_starts(), который возвращает логическое значение, соответствующее условию ввода.

  2. Значения 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...