У меня есть датафрейм:

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
french_fries 24 Ноя 2020 в 14:24

1 ответ

Лучший ответ

Это работает:

library(dplyr)
library(stringr)
df %>% mutate(type1 = case_when(type == 'message' & 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: \x91jsonlite\x92" NA          
6 object        "object in message"                   NA      
1
Karthik S 24 Ноя 2020 в 11:36