Подсчитать количество строк в group_by, которые равны чему-либо - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть набор данных, который выглядит следующим образом:

data <- data.frame(place=c("Start", "B", "B", "A", "A", "Start", "A", "O", "A", "Start", "O", "A", "O"), ID=c(rep(1, 5), rep(2,4), rep(3,4)))

   place ID
1  Start  1
2      B  1
3      B  1
4      A  1
5      A  1
6  Start  2
7      A  2
8      O  2
9      A  2
10 Start  3
11     O  3
12     A  3
13     O  3

Я хочу посчитать, сколько раз в каждом group_by (ID) присутствует «O».Таким образом, ID 1 имеет ноль O, ID 2 имеет один «O», а ID 3 имеет два O.Решение сильфонного фильтра для строк с O, так что я не получаю ноль.

Решения из приведенных ниже ответов дают такой вывод:

  ID place
1  2     1
2  3     2

Но мне нужна таблица, которая также показывает счет для ID 1, который равен нулю.Я, конечно, мог бы оставить left_join в исходных идентификаторах, а затем установить их счетчик на ноль, но должно быть решение, которое будет более простым.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Нет необходимости в каком-либо пакете, просто сделайте

  data [(data$place=="O"),] 

, он даст нарезанный кадр данных только с O в строках и затем агрегирует его.ИЛИ

  aggregate(place ~ ID, data[data$place == "O", ], FUN = length)

вы получите ответ

0 голосов
/ 29 ноября 2018

Один dplyr решение:

library(dplyr)
data %>% 
  group_by(ID) %>% 
  summarise(place = sum(place=="O"))
0 голосов
/ 29 ноября 2018

раствор с data.table пакетом

library(data.table)
dt <- as.data.table(data)
count_dt <- dt[place == "O", .N, by = ID]
count_df <- as.data.frame(count_dt)
count_df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...