ifelse在r的突变函数中



我正试图使用r中的mutate函数添加一个具有条件的列,但一直出现错误。代码直接来自老师的讲座,但却出现了错误。LineItem列是一个因子类,我不确定这是否有区别。请就我缺少的东西提出建议。

谢谢,Avi

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",没有默认

您将"("放错了位置。ifelse的通用语法为:ifelse(cond,value if true,value if false(

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))

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

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

参见文档

不要创建单独的对象并在数据帧中使用,而是将它们保留在数据帧本身中。您可以稍后删除不需要的列。此外,您可以在没有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)))

最新更新