Преобразуйте непрерывные числовые значения c в отдельные категории, определенные интервалами. код выполняется без ошибок, но все категории не созданы - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть фрейм данных с непрерывной числовой переменной c, дни в диапазонах (Дни). Я хочу создать новую дискретную переменную с несколькими категориями на основе интервалов. R-Programming Я создаю этот код без ошибок, но в наборах данных значения не генерируются правильно.

Некоторые примеры данных

Raw_data(Days= -362:1081)
Raw_data<- mutate(Raw_data,Days_Bin = ifelse(Raw_data$Days <= 0,Days_Bin <-"0 or early",
ifelse(Raw_data$Days <= 5 && Raw_data$ Days >0 ,Days_Bin <- "<=5", 
ifelse(Raw_data$Days <= 30 ,Days_Bin <- "<=30",
ifelse(Raw_data$Days <= 60, Days_Bin <- "<=60", Days_Bin <- ">60")))))

Он запускается без ошибок, но для значений дней он преобразован только в две категории: «0 или ранний» и «<= 30». для всех 0 или отрицательных значений он установил «0 или ранее», и больше 0 он установил «<= 30» </p>

Также попытался, поэтому, пожалуйста, не предлагайте делать это:

Raw_data<- mutate(Raw_data,Days_Bin = ifelse(Raw_data$Days <= 0,"0 or early",
ifelse(Raw_data$Days <= 5 && Raw_data$ Days >0 ,"<=5", 
ifelse(Raw_data$Days <= 30 ,"<=30",
ifelse(Raw_data$Days <= 60, "<=60", ">60")))))

1 Ответ

0 голосов
/ 22 февраля 2020

1.Создать воспроизводимые примеры данных

  Raw_data <- data.frame(Days =  -362:1081)

2.Решение с использованием dplyr и tidyr:

library(dplyr)
library(tidyverse)
Raw_data_with_groups <- Raw_data %>%
  mutate(Days_bin = cut(Days,
                        breaks = c(min(Days), 0, 5, 30, 60, max(Days)),
                        labels = c("<=0", "0-5", "5-30", "30-60", ">60")))

Редактировать:

Или, если Вы действительно хотите использовать конструкцию ifelse: замените && на & или даже лучше, оставьте все вместе:

    Raw_data <- data.frame(Days=c(-1,0,3,20,31,61))
    df <- mutate(Raw_data,Days_Bin = ifelse(Raw_data$Days <= 0,"0 or early",
                                      ifelse(Raw_data$Days <= 5,"<=5", 
                                             ifelse(Raw_data$Days <= 30 ,"<=30",
                                                    ifelse(Raw_data$Days <= 60, "<=60", ">60")))))

Возвращает:

  Days   Days_Bin
1   -1 0 or early
2    0 0 or early
3    3        <=5
4   20       <=30
5   31       <=60
6   61        >60
...