繁体   English   中英

tidyverse 解决方案:有没有办法在某个单词/值出现时只保留行,例如一列中的 3x

[英]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) 具有三重值的行到新的 dataframe 中。 因此,对于这个特定的示例,所有行都具有“name1”,因为它重复了三次。 如果数据集非常大,如何执行此操作,如何检测并保留具有三重(或任何其他任意数量)值的行?

dplyr

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

底座 R

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

output

  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 - 的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM