Выражения в выражении case_when в R - PullRequest
0 голосов
/ 04 мая 2018

Мой вопрос основан на вопросе, заданном здесь для Multiple expression in ifelse() statement. Мне нужно иметь expression вместо Арифметической операции внутри функции case_when (). Ниже мой фрейм данных

my_df <- data.frame(H= c("ABC", "DEF", "GHI"))

Итак, вот мой код, в который я пытался добавить выражение внутри case_when(), но оно не работает.

library(dplyr)
output_df$D <- case_when(
  my_df$H == "ABC" ~ substr(my_df$H,1,3),
  my_df$H == "DEF" ~ substr(my_df$H,1,2),
  TRUE ~ substr(my_df$H,1,1)
 )

Мой ожидаемый выходной кадр данных:

output_df

   D  
  ABC  
  DE  
  G

1 Ответ

0 голосов
/ 04 мая 2018

Непонятно об ошибке (в комментариях), поскольку код работает нормально, хотя 'H' - это класс factor. Одна вещь, которую мы можем сделать, это преобразовать 'D' в класс character (as.character) перед выполнением case_when

library(tidyverse)
output_df <- my_df %>%
               mutate(D = as.character(D)) %>%
               transmute(D = case_when(H=="ABC" ~ substr(H, 1, 3), 
                        H=="DEF" ~ substr(H, 1, 2), 
                        TRUE ~ substr(H, 1, 1)))
output_df
#    D
#1 ABC
#2  DE
#3   G

Или лучше было бы использовать stringsAsFactors = FALSE при data.frame вызове

my_df <- data.frame(H= c("ABC", "DEF", "GHI"), stringsAsFactors = FALSE)

Или используйте data_frame или tibble для создания набора данных, который по умолчанию дает character класс для нечислового столбца

my_df <- data_frame(H= c("ABC", "DEF", "GHI"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...