Как создать столбец, требующий более 50 различных значений факторов с помощью dplyr - PullRequest
0 голосов
/ 30 января 2019

Я использую операторы ifelse более 100 раз для создания> 100 категорий посещений, как показано ниже.

df<-data.frame(visit_time=c(12,20,70,100),city=c("X","X","X","X"))

df$visit_category<-ifelse(df$visit_time>=0 & df$visit_time<12 ,"0-12",ifelse(df$visit_time>=12 & df$visit_time <20,"12-20",ifelse(df$visit_time>=20 & df$visit_time <50,"20-50",ifelse(df$visit_time>=50 & df$visit_time <100,"50-100",">100"))))

Как показано в данных примера [столбец категории посещения], у меня есть 4 различных значения для образцаданные, и мне нужно создать> 50 различных категорий на фактических данных.

Когда я пытаюсь создать более 50 категорий, я получаю ошибку в R, как это [Было ли какое-то исследование n обнаружило, что R не допускает более 50 операторов iflese одновременно !!, Не знаюесли это правда]

Ошибка: неожиданная ')' в

Ошибка: переполнение contextxtack в строке 42

Есть ли лучший способ создать>50 различных значений категории посещения, кроме использования операторов ifelse в R ??

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Если вы не можете использовать функцию cut(), одна альтернатива - использовать цикл с оператором if , проверяющим условия ваших сегментов, вместо непосредственного использованияфункция ifelse().

df$category <- NA

breaks_limits <- c(0, 12, 20, 50, 100, 1e6)
breaks_labels <- c('[0-12]', '[12-20]', '[20-50]', '[50-100]', '100+')
breaks_num <- length(breaks_labels)

for(i in 1:nrow(df))
{
  for(b in 1:breaks_num)
  {
    if(df$visit_time[i] >= breaks_limits[b] & df$visit_time[i] < breaks_limits[b+1])
      df$category[i] <- breaks_labels[b]
  }
}
0 голосов
/ 30 января 2019

Вы можете использовать функцию cut() с аргументом breaks = для определения собственных интервалов.

library(dplyr)
library(forcats)

df %>% 
  mutate(
    category = visit_time %>% cut(breaks = c(12, 20, 50, 100, 1e6), include.lowest = T, right = F),
    category = fct_recode(category, '100+' = '[100,1e+06]')
  )

  visit_time city category
1         12    X  [12,20)
2         20    X  [20,50)
3         70    X [50,100)
4        100    X     100+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...