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 -.
的列
假设数据看起来像这样
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 -.
的列