ifelse в функции изменения в r - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь добавить столбец с условием, используя функцию изменения в r, но продолжаю получать сообщение об ошибке. Код взят прямо из лекции учителя, но все же возникает ошибка. Столбец 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): аргумент «да» отсутствует, значение по умолчанию отсутствует

Ответы [ 3 ]

1 голос
/ 06 мая 2020

Вы поместили ')' в неправильные места. Общий синтаксис 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))
0 голосов
/ 06 мая 2020

Не создавайте отдельные объекты и не используйте их во фрейме данных, вместо этого храните их в самом фрейме данных. Позже вы сможете удалить ненужные столбцы. Более того, это можно сделать без 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)))
0 голосов
/ 06 мая 2020

@ Нирбхай Сингх, ответ правильный. Однако, если вы сравниваете два вектора, обычно лучше использовать dplyr::if_else, потому что он строже в отношении NA значений:

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

См. do c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...