Ошибка при делении значений столбца на верхние 20% и нижние 80% - PullRequest
0 голосов
/ 12 октября 2018

У меня есть такой вектор:

Vec <- data.frame( Vec = c("70.0600", "8.5100", "5.8600", "399.9800", "9.0600", "78.8200", "71.4600") )

И я хочу разделить вышеуказанные значения на верхние 20% и нижние 80% таким образом, чтобы результат выглядел следующим образом:

 Vec        Dec
 70.0600    Top_20
 .          .
 .          .
 5.8600     Bottom_80

Я пытаюсь что-то вроде этого:

Vec$Quartile <- quantile(Vec$Vec, probs = c(0.20, 0.80))

Но я получил точно 50-50% значений данных:

 sum( Vec$Quartile>20 )

Я не уверен, где я былнеправильно?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Очень простой подход без загрузки дополнительных библиотек:

Результат

   value       dec
1 399.98    Top_20
2  78.82    Top_20
3  70.06 Bottom_20
4   8.51 Bottom_20
5   5.86 Bottom_20
6   9.06 Bottom_20
7  71.46 Bottom_20

Код

Vec <- c(70.0600, 8.5100, 5.8600, 399.9800, 9.0600, 78.8200, 71.4600)

q <- quantile(Vec, .8)

Vec <- rbind(
    data.frame(value = subset(Vec, Vec > q), dec = "Top_20"),
    data.frame(value = subset(Vec, Vec <= q), dec = "Bottom_20"))
0 голосов
/ 12 октября 2018

Как это?

library(dplyr)

Vec <- data.frame(Vec = c(70.0600, 8.5100, 5.8600, 399.9800, 9.0600, 78.8200, 71.4600))

Vec %>%
  mutate(up = quantile(Vec, .8),
         part = ifelse(Vec > up, "Top_20", "Bottom_80"))

     Vec     up      part
1  70.06 77.348 Bottom_80
2   8.51 77.348 Bottom_80
3   5.86 77.348 Bottom_80
4 399.98 77.348    Top_20
5   9.06 77.348 Bottom_80
6  78.82 77.348    Top_20
7  71.46 77.348 Bottom_80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...