【问题标题】:Expressions in case_when statement in RR中case_when语句中的表达式
【发布时间】:2018-05-04 13:37:09
【问题描述】:

我的问题是基于question asked hereMultiple expression in ifelse() statement。我需要在 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

【问题讨论】:

  • 代码对我来说运行良好。你有 data.frame output_df 吗?假设,如果我将输出分配给 my_df$D &lt;- 它工作正常
  • @akrun 不,我收到错误Error: must be type character, not double
  • 您有一个因子列,但我使用的版本对我来说效果很好
  • 我正在使用dplyr_0.7.4

标签: r dataframe


【解决方案1】:

虽然“H”是factor 类,但由于代码运行良好,因此不清楚错误(在 cmets 中)。一件事,我们可以做的是在做case_when之前将'D'转换为character类(as.character

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

或者更好的是在data.frame 调用中使用stringsAsFactors = FALSE

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

或使用data_frametibble 创建默认为非数字列提供character 类的数据集

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2012-04-29
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2011-03-28
    • 2016-03-17
    相关资源
    最近更新 更多