我正在尝试根据“类别”变量对数据进行子集化。更具体地说,类别具有两个级别:a和b。示例数据如下所示:
id <- c(1,2,2,2,1,1,2,2,1,2)
category <- c("a", "b", "a", "a", "b", "a","a", "b","a","a")
data <- data.frame("id"=id, "category"=category)
> data
id category
1 1 a
2 2 b
3 2 a
4 2 a
5 1 b
6 1 a
7 2 a
8 2 b
9 1 a
10 2 a
我想获得id,它的类别变量中仅包含3个以上的a或b计数。我先看一张桌子, 表格可能如下所示:(此部分不一定要打印)
a b
1 3 1
2 4 2
然后选择与我的条件匹配的id。
a b
2 4 2
谢谢!
答案 0 :(得分:2)
一种dplyr
可能是:
data %>%
count(id, category) %>%
group_by(id) %>%
filter(n_distinct(category) == 2 & any(n > 3))
id category n
<dbl> <fct> <int>
1 2 a 4
2 2 b 2
如果要使用dplyr
和tidyr
获得准确的输出,可以执行以下操作:
data %>%
count(id, category) %>%
group_by(id) %>%
filter(n_distinct(category) == 2 & any(n > 3)) %>%
spread(category, n)
id a b
<dbl> <int> <int>
1 2 4 2
答案 1 :(得分:2)
如果您只想要ID符合您的条件,则可以使用table
和rowSums
:
names(which(rowSums(table(data) > 3) != 0))
[1] "2"