Создать переменную во фрейме данных, используя значение Quartile другого столбца - PullRequest
0 голосов
/ 14 марта 2019

Я хочу создать переменную в кадре данных, которая бы классифицировала наблюдения на основе значения Quartile / Median столбца.

Ниже я попробовал.

Name<-c("name1","name2","name3","name4","name5","name6")
Age<-c(49,12,29,55,25,19)

df9<-data.frame(Name,Age)

df9$catoG[df9$Age<=quantile(df9$Age,0.25)]<-"Young"
df9$catoG[df9$Age>quantile(df9$Age,0.25) & df9$Age<=median(df9$Age)]<-"Adult"
df9$catoG[df9$Age>median(df9$Age)]<-"Elder"

Полученный вывод:

   Name Age catoG
1 name1  49 Elder
2 name2  12 Young
3 name3  29 Elder
4 name4  55 Elder
5 name5  25 Adult
6 name6  19 Young

Есть ли в R более эффективный способ, с помощью которого я могу добиться того же?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

cut - ваш друг для всех задач, связанных с разбиением векторов на диапазоны:

df9$new = cut(df9$Age, 
              breaks = c(-Inf, quantile(df9$Age,c(0.25, 0.5)), Inf), 
              labels = c('Young', 'Adult', 'Elder') )

#   Name Age catoG   new
#1 name1  49 Elder Elder
#2 name2  12 Young Young
#3 name3  29 Elder Elder
#4 name4  55 Elder Elder
#5 name5  25 Adult Adult
#6 name6  19 Young Young  
0 голосов
/ 14 марта 2019

Вы можете использовать dplyr::mutate и dplyr::case_when из пакета dplyr:

Name<-c("name1","name2","name3","name4","name5","name6")
Age<-c(49,12,29,55,25,19)

df9<-data.frame(Name,Age)

df9 %>% mutate(catoG = case_when(Age<=quantile(Age,0.25) ~ 'Young',
                                 Age>quantile(Age,0.25) & Age<=median(Age) ~ 'Adult',
                                 TRUE ~ 'Elder'))
...