case_when и grepl, чтобы изменить новую переменную и принять определенные строки символов - PullRequest
0 голосов
/ 08 марта 2020

У меня есть грязные данные (результаты), и я хочу создать фрейм данных, в котором из этого списка результатов будут взяты только определенные значения, а остальные будут оставлены пустыми:

results <- c("500",
             "500.0",
             "60",
             "60.0",
             "UNKNOWN",
             "450Other",
             "300-301",
             "ZZZ 12", "800/900", "500WWW500")

df <- data.frame(MIX = results, DESIRED = c("500",
                                            "500.0",
                                            "60",
                                            "60.0",
                                            "UNKNOWN",
                                            "",
                                            "",
                                            "","",""))

Я думаю, мне нужно использовать case_when и grepl для этого, но я не уверен, как правильно использовать REGEX.

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Если вы хотите сохранить целые или десятичные числа вместе с "UNKOWN", мы можем использовать grepl как:

df <- data.frame(MIX = results, stringsAsFactors = FALSE)
df$output <- df$MIX
df$output[!(grepl('^\\d+\\.?\\d+?$', df$MIX) | df$MIX == 'UNKNOWN')] <- ''

df
#         MIX  output
#1        500     500
#2      500.0   500.0
#3         60      60
#4       60.0    60.0
#5    UNKNOWN UNKNOWN
#6   450Other        
#7    300-301        
#8     ZZZ 12        
#9    800/900        
#10 500WWW500        
1 голос
/ 09 марта 2020

Вы можете добиться этого с помощью case_when:

library(tidyverse)

df <- data.frame(MIX = results, stringsAsFactors = F) %>%
  mutate(DESIRED = case_when(str_detect(MIX, '^\\d+\\.?\\d+?$|UNKNOWN') ~ MIX, 
                             TRUE ~ ''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...