Подсчитать процент специальных значений в столбце, используя dplyr - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть фрейм данных:


x = data.frame(group = c(1,1,1,2,2,3,3,3,4,4),
               subgroup = c(1.1, 1.2, 1.3, 2.1, 2.2, 3.1, 3.2, 3.3, 4.1, 4.2),
               type = c("good", 'good', 'bad', 'bad', 'good', 'bad', 'bad', 'good', 'good', 'good')
)

Я хочу создать новый data.frame с той же группой столбцов и столбцом процентного содержания «хорошо» в каждой группе. Как я могу сделать это, используя только dplyr или мне нужен другой пакет? Ожидаемый результат:


x_new = data.frame(group = c(1,2,3,4),
               percent = c(0.66, 0.5, 0.33, 1)
)

Ответы [ 2 ]

3 голосов
/ 07 февраля 2020
library(dplyr)
x %>% 
  group_by(group) %>% 
  summarise(percent = mean(type == "good"))

# A tibble: 4 x 2
  group percent
  <dbl>   <dbl>
1     1   0.667
2     2   0.5  
3     3   0.333
4     4   1  

Или база R (пакеты не нужны):

setNames(aggregate(type == "good" ~ group, x, mean), c("group", "percent"))
1 голос
/ 07 февраля 2020

Решения @ sindri_baldur уже действительно хороши.

Вот еще одно базовое решение R с использованием aggregate, но с prob.table

> aggregate(type~group,x, function(v) prop.table(table(v))) # including percentages for both "bad" and "good"
  group  type.bad type.good
1     1 0.3333333 0.6666667
2     2 0.5000000 0.5000000
3     3 0.6666667 0.3333333
4     4 0.0000000 1.0000000

или

> aggregate(type~group,x, function(v) prop.table(table(v))["good"]) # only percentage of "good"
  group      type
1     1 0.6666667
2     2 0.5000000
3     3 0.3333333
4     4 1.0000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...