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

#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, который имеет значения, зависящие от значений других столбцов.
Значение в этом столбце должно быть:

  1. «message_case», если:
  • тип столбца — «сообщение»
  • значение столбца содержит подстроку «Идентификатор предупреждающих сообщений (» в нем
  1. «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(значение исправлено (‘Идентификатор предупреждающих сообщений’))