Непонятно об ошибке (в комментариях), поскольку код работает нормально, хотя '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"))