使用dplyr过滤变量中所有类别观测值的年份
我有一个数据集,其中的行是一年和一个阶段的单个观测值,在给定的一年中,可以有零到多个给定阶段的观测值:使用dplyr过滤变量中所有类别观测值的年份,r,dplyr,R,Dplyr,我有一个数据集,其中的行是一年和一个阶段的单个观测值,在给定的一年中,可以有零到多个给定阶段的观测值: df <- data.frame(year = c(2000, 2000, 2000, 2000, 2001, 2001, 2001, 2002, 2002, 2003, 2003, 2003), stage = c("a", "a", "a", "b", "b", "b",
df <- data.frame(year = c(2000, 2000, 2000, 2000, 2001, 2001,
2001, 2002, 2002, 2003, 2003, 2003),
stage = c("a", "a", "a", "b", "b", "b",
"b", "a", "b", "a", "a", "a"))
df
## year stage
## 1 2000 a
## 2 2000 a
## 3 2000 a
## 4 2000 b
## 5 2001 b
## 6 2001 b
## 7 2001 b
## 8 2002 a
## 9 2002 b
## 10 2003 a
## 11 2003 a
## 12 2003 a
这似乎有点笨重,对于非常大的数据集可能无法很好地扩展。有没有更简单、更直接的方法可以使用
dplyr
对这些年份进行子集划分,而无需调用tidyr::spread
?您可以使用分组依据%>%filter
;对于每个组,使用all(c('a','b')%在%stage)
检查a
和b
是否都在stage列中,并根据它筛选组:
df %>% group_by(year) %>% filter(all(c('a', 'b') %in% stage))
# A tibble: 6 x 2
# Groups: year [2]
# year stage
# <dbl> <fctr>
#1 2000 a
#2 2000 a
#3 2000 a
#4 2000 b
#5 2002 a
#6 2002 b
df%>%group_by(year)%>%filter(所有(c('a','b')%在%stage中))
#一个tibble:6x2
#组别:年份[2]
#年期
#
#1 2000年a
#2000年1月2日
#3 2000年a
#2000年b月4日
#5 2002年a
#6 2002年b
您可以使用分组依据%>%filter
;对于每个组,使用all(c('a','b')%在%stage)
检查a
和b
是否都在stage列中,并根据它筛选组:
df %>% group_by(year) %>% filter(all(c('a', 'b') %in% stage))
# A tibble: 6 x 2
# Groups: year [2]
# year stage
# <dbl> <fctr>
#1 2000 a
#2 2000 a
#3 2000 a
#4 2000 b
#5 2002 a
#6 2002 b
df%>%group_by(year)%>%filter(所有(c('a','b')%在%stage中))
#一个tibble:6x2
#组别:年份[2]
#年期
#
#1 2000年a
#2000年1月2日
#3 2000年a
#2000年b月4日
#5 2002年a
#6 2002年b
也许这对你有用:
df %>% group_by(year) %>%
filter(length(unique(stage)) == 2)
也许这对你有用:
df %>% group_by(year) %>%
filter(length(unique(stage)) == 2)