我的问题基于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
答案 0 :(得分:1)
虽然'H'是factor
类,但代码运行正常并不清楚错误(在注释中)。有一件事,我们可以做的是在执行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"))