r - 按计数子集

标签 r count dplyr subset

<分区>

我有一个数据框

library(dplyr)

ID <- c(1,1,1,1,2,2,3,3,3,3,4,4,5)
Score <- c(20,22,34,56,78,98,56,43,45,33,24,54,22)
Quarter <- c("Q1","Q2","Q3","Q4","Q1","Q2","Q1","Q2","Q3","Q4","Q1","Q2","Q1")
df <- data.frame(ID,Score,Quarter)

我只想处理包含所有 4 个季度的数据(“季度”列中的 Q1、Q2、Q3、Q4)。我认为我可以做到这一点的一种方法是当 ID 出现 4 次时使用子集,因为它在每个季度重复出现。我很难对 ID 的数量进行子设置。我试过:

filter(df, count(df, vars = ID)==4)

但它没有用,非常感谢指导。 谢谢

最佳答案

我们可以做的一种方法是使用 n_distinct 为每个 ID 获取唯一值并过滤具有所有 4 个值的组。

library(dplyr)
df %>%
   group_by(ID) %>%
   filter(n_distinct(Quarter) == 4)


#    ID Score Quarter
#  <dbl> <dbl> <fct>  
#1  1.00  20.0 Q1     
#2  1.00  22.0 Q2     
#3  1.00  34.0 Q3     
#4  1.00  56.0 Q4     
#5  3.00  56.0 Q1     
#6  3.00  43.0 Q2     
#7  3.00  45.0 Q3     
#8  3.00  33.0 Q4     

使用 ave 的等效基础 R 实现将是

df[as.numeric(ave(df$Quarter, df$ID, FUN = function(x) length(unique(x)))) == 4, ]

关于r - 按计数子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49868884/

相关文章:

r - 如何在特定列的data.table中将字符转换为数字?

r - 查找组内前一个冬天的事件数

r - 使用 dplyr 和 add_row() 在每个组中添加行

r - Tidymodels(使用 fit_samples() 拟合随机森林) : Fold01: internal: Error: Must group by variables found in `.data`

R,迭代矩阵的行向量

php - 每个月的Mysql计数

powershell - Powershell:在忽略特定目录的同时递归计算文件

r - Shiny 应用程序不使用 dplyr 和 %in% 运算符进行过滤

r - 根据列表中的类别对列进行分组

r - 在 Ubuntu 16.04 上将 R 版本从 3.4.4 升级到 3.5.3