tidyverse 解决方案:有没有办法在某个 word/value 发生时只保留行,例如一列 3 倍

tidyverse solution: is there a way to keep only rows when a certain word/value occurs e.g. 3x in a column

假设数据看起来像这样

A <- c("name1", "name2", "name3", "name1", "name1", "name4")
B <- c(10, 8, 7, 3, -1, -2)
C <- c(8, 3, -1, -10, -2, -2)
df <- data.frame(A, B, C)
df

      A  B   C
1 name1 10   8
2 name2  8   3
3 name3  7  -1
4 name1  3 -10
5 name1 -1  -2
6 name6 -2  -2

现在必须有一种聪明的方法来仅将第一列 (A) 具有三重值的行“收集”到新数据框中。所以对于这个特定的例子,这将是所有具有“name1”的行,因为它重复了三次。如果数据集非常大,如何做到这一点,如何检测并保留具有三重(或任何其他任意数量)值的行?

dplyr

df %>% 
  group_by(A) %>% 
  filter(n() == 3)

基础 R

df[A %in% names(which(table(df$A) == 3)),]

输出

  A         B     C
1 name1    10     8
2 name1     3   -10
3 name1    -1    -2

dplyr 方法略有不同:

df %>%
  add_count(A, name = "A_count")%>%
  filter(A_count == 3) %>%
  select(-A_count)

在 A 中添加变量的计数,命名计数(否则该列将命名为 n),然后过滤,删除带有 select -.

的列