我认为这是一项非常简单的任务,但无法弄清楚如何在R中完成。
这是我的数据框。
id <- c(1, 1, 1,
2, 2,
3, 3, 3, 3,
4, 4, 4,
5, 5,
6, 6, 6,
7,
8,
9,
10,
11,
12)
type <- c('A', 'B', 'K',
'A', 'B',
'B', 'C', 'D', 'E',
'B', 'D', 'F',
'A', 'G',
'C', 'B', 'G',
'B',
'B',
'B',
'B',
'B',
'B')
df <- data.frame(id, type)
我想完成两件事:
将type
中最常出现的两个频段列入列表
使用该列表对原始数据框进行子集化。
因此,我将拉出任何包含A或B的行,然后拉出这些ID并获取所有这些ID的观察结果。这有意义吗?
更新:
根据Matt在下面的回答,我能够让它发挥作用,但它仍然不理想......必须有更好的方法,对吗?
vec <- df %>%
count(type, sort = TRUE)
vec <- head(vec, 2)
vecx <- as.list(unique(as.character(vec$type)))
df3 <- df %>%
filter(type %in% vecx)
答案 0 :(得分:1)
这样的事可能适合你。
library(dplyr)
n <- 2
df <- merge(as.data.frame(head(count(df, type, sort = TRUE), n)), df)[,c("id","type")]