我正试图使用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)))