计算group_by中等于某值的字符串数

时间:2018-11-29 10:49:21

标签: r dplyr

我有一个看起来像这样的数据集:

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原始ID,然后将其计数设置为零,但是必须有一个更简单的解决方案。

3 个答案:

答案 0 :(得分:3)

不需要任何包装,只需

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

它将给出切片的数据帧,行中仅包含O,然后对其进行汇总。或

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

您会得到答案

答案 1 :(得分:2)

带有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

答案 2 :(得分:1)

一种dplyr解决方案是:

library(dplyr)
data %>% 
  group_by(ID) %>% 
  summarise(place = sum(place=="O"))