Использование mutate и sets_with - PullRequest
1 голос
/ 25 апреля 2020

Я хотел бы изменить значение определенных переменных в зависимости от того, начинаются ли они с определенной последовательности строк.

Пример:

df <- data.frame(var1 = c("12345", "12345", "12345", "23456", "23456"))
df %>% mutate(var2 = ifelse(starts_with("123"), "ok", "not ok"))

Все значения, начинающиеся с "123", должны быть изменен на "хорошо". Как я могу объединить starts_with() с mutate()?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

starts_with используется для выбора столбцов, которые начинаются с определенного имени. Здесь вы можете использовать базу R startsWith.

library(dplyr)
df %>% mutate(var2 = ifelse(startsWith(var1, "123"), "ok", "not ok"))

#   var1   var2
#1 12345     ok
#2 12345     ok
#3 12345     ok
#4 23456 not ok
#5 23456 not ok

Однако мы также можем сделать это в базе R и без ifelse.

df$var2 <- c('not ok', 'ok')[startsWith(df$var1, '123') + 1]

Или с grepl

df$var2 <- c('not ok', 'ok')[grepl('^123', df$var1) + 1]

data

startsWith, чтобы данные были символьными, используйте stringsAsFactors = FALSE.

df <- data.frame(var1 = c("12345", "12345", "12345", "23456", "23456"), 
      stringsAsFactors = FALSE)
1 голос
/ 25 апреля 2020

Мы можем использовать case_when

library(dplyr)
library(stringr)
df %>% 
  mutate(var2 = case_when(str_detect(var1, '^123') ~ 'ok',
                TRUE ~ 'not ok'))
#   var1   var2
#1 12345     ok
#2 12345     ok
#3 12345     ok
#4 23456 not ok
#5 23456 not ok

Или с ifelse в base R

ifelse(grepl('^123', df$var1), 'ok', 'not ok')
#[1] "ok"     "ok"     "ok"     "not ok" "not ok"

данные

df <- data.frame(var1 = c("12345", "12345", "12345", "23456", "23456"), 
      stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...