【问题标题】:ifelse in a mutate function in rifelse 在 r 中的 mutate 函数中
【发布时间】:2020-05-06 11:28:23
【问题描述】:

我正在尝试使用 r 中的 mutate 函数添加具有条件的列,但不断出现错误。代码直接来自老师的讲座,但发生了错误。 LineItem 列是一个因子类,我不确定这是否会有所作为。 请就我所缺少的内容提出建议。

谢谢你, 视频

df <- read.csv('ities_short.csv')

colSums(is.na(df))

sl <- str_length(df$LineItem)
avg <- mean(str_length(df$LineItem))

df <- df %>% mutate(LineItem_LongName = ifelse(sl > avg), 1, 0)

ifelse(sl > avg) 中的错误:缺少参数“yes”,没有默认值

【问题讨论】:

    标签: r function if-statement dplyr


    【解决方案1】:

    你把')'放在了错误的地方。 ifelse 的一般语法是: ifelse(cond,真值,假值)

    df <- read.csv('ities_short.csv')
    
    colSums(is.na(df))
    
    sl <- str_length(df$LineItem)
    avg <- mean(str_length(df$LineItem))
    
    df <- df %>% mutate(LineItem_LongName = ifelse(sl > avg, 1, 0))
    

    【讨论】:

      【解决方案2】:

      @Nirbhay Singh 的答案是正确的。但是,如果您比较两个向量,通常最好使用dplyr::if_else,因为它对NA 的值更严格:

      df <- df %>% mutate(LineItem_LongName = if_else(sl > avg, 1, 0))
      

      the doc

      【讨论】:

        【解决方案3】:

        不要创建单独的对象并在数据框中使用它,而是将它们保存在数据框本身中。您可以稍后删除不需要的列。此外,您可以在没有ifelse 的情况下执行此操作。

        library(dplyr)
        library(stringr)
        
        df %>%
           mutate(temp = str_length(LineItem), 
                  LineItem_LongName = as.integer(temp > mean(temp)))
        

        或者在基础 R 中:

        df$temp <- nchar(df$LineItem)
        transform(df, LineItem_LongName = +(temp > mean(temp)))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          • 2015-07-11
          相关资源
          最近更新 更多