R中case_when语句中的表达式

时间:2018-05-04 05:26:01

标签: r dataframe

我的问题基于Multiple expression in ifelse() statement的{​​{3}}。我需要在case_when()函数中使用expression而不是算术运算。以下是我的数据框

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 :(得分:1)

虽然'H'是factor类,但代码运行正常并不清楚错误(在注释中)。有一件事,我们可以做的是在执行character

之前将'D'转换为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_frametibble创建数据集,默认情况下为非数字列提供character

my_df <- data_frame(H= c("ABC", "DEF", "GHI"))