[英]R: Filter rows from a matrix if e.g. a certain value is present in any more left column than another certain value in a more right column?
[英]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”,因为它重复了三次。 如果数据集非常大,如何执行此操作,如何检测并保留具有三重(或任何其他任意数量)值的行?
df %>%
group_by(A) %>%
filter(n() == 3)
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 - 的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.