#r #string #dataframe
#r #строка #фрейм данных
Вопрос:
У меня есть фрейм данных:
type value
message Warning messages ID(34140)
eof EOF within quoted string
message Warning messages ID(4525)
message_error Warning messages ID(4525) error
package Attaching package: ‘jsonlite’
object object in message
Я хочу добавить столбец type2, который имеет значения, зависящие от значений других столбцов.
Значение в этом столбце должно быть:
- «message_case», если:
- тип столбца — «сообщение»
- значение столбца содержит подстроку «Идентификатор предупреждающих сообщений (» в нем
- «eof_case», если:
- тип столбца — «eof»
Итак, желаемый результат:
type value type1
message Warning messages ID(34140) message_case
eof EOF within quoted string eof_case
message Warning messages ID(4525) message_case
message_error Warning messages ID(4525) error NA
package Attaching package: ‘jsonlite’ NA
object object in message NA
Как я мог это сделать?
Комментарии:
1. Я не могу полностью понять, чего вы хотите. не могли бы вы привести пример в каждом случае строки вашего ожидаемого результата?
2. Вы пробовали использовать
?grepl
и друзья?3. @markus я думал об использовании stringi, но, как вы видите, он должен зависеть от двух столбцов одновременно, и я не понимаю, как это сделать
4. @jhyeon я добавил некоторые подробности
5. Вы пробовали что-то подобное?
type == "message" amp; grepl(...)
@french_fries
Ответ №1:
Работает ли это:
library(dplyr)
library(stringr)
df %>% mutate(type1 = case_when(type == 'message' amp; str_detect(value,'Warning messages ID') ~ 'message_case',
type == 'eof' ~ 'eof_case',
TRUE ~ NA_character_))
# A tibble: 6 x 3
type value type1
<chr> <chr> <chr>
1 message "Warning messages ID(34140)" message_case
2 eof "EOF within quoted string" eof_case
3 message "Warning messages ID(4525)" message_case
4 message_error "Warning messages ID(4525) error" NA
5 package "Attaching package: x91jsonlitex92" NA
6 object "object in message" NA
Комментарии:
1. появляется сообщение: Ошибка: проблема с
mutate()
вводомtype1
. ✖ Неправильно вложенные круглые скобки в шаблоне регулярных выражений. (U_REGEX_MISMATCHED_PAREN) ℹ Входныеtype1
данные естьcase_when(...)
.2. @french_fries, попробуйте:str_detect(значение исправлено (‘Идентификатор предупреждающих сообщений’))