在我的完整数据集中,有相同领域的重复调查。我的问题是,我试图选择在进行调查的每一年中接受过调查的对象。另一种情况是,四次中至少有三次被调查过。
我制作了以下示例数据集以突出显示我正在尝试做的事情:
id area_id year
1 1 2010
2 1 2011
3 1 2012
4 1 2013
5 2 2010
6 2 2011
7 2 2013
8 3 2010
9 3 2012
10 4 2012
使用以下代码轻松创建它:
ex_df <- data.frame(id = 1:10,
area_id = c(rep(1, 4), rep(2, 3), rep(3, 2), 4),
year = c(2010:2013, 2010, 2011, 2013, 2010, 2012, 2012))
我对dplyr
的简单理解让我在做
ex_df %>% group_by(area_id, year) %>% ???
到目前为止,但是???表示我迷失了如何过滤它以返回与我的需求有关的ID向量的地方。
对于第一个问题,我想过滤以将向量(1, 2, 3, 4)
赋予area_id 1
,因为这是过去四年中唯一被调查的向量。
对于第二个问题,我希望向量为(1, 2, 3, 4, 5, 6, 7)
。
什么是适当的管理方式?
答案 0 :(得分:2)
对于情况1:
ex_df %>%
group_by(area_id) %>%
filter(n() == 4) %>%
pull(id)
#[1] 1 2 3 4
对于情况2:
ex_df %>%
group_by(area_id) %>%
filter(n() >= 3) %>%
pull(id)
#[1] 1 2 3 4 5 6 7
答案 1 :(得分:1)
怎么样?
required_years <- 2010:2013
ex_df2 <- ex_df %>%
group_by(area_id) %>%
mutate(
fouryears = all(required_years %in% year),
threeyears = sum(required_years %in% year) >= 3
)
ex_df2
# Source: local data frame [10 x 5]
# Groups: area_id [4]
# id area_id year fouryears threeyears
# <int> <dbl> <dbl> <lgl> <lgl>
# 1 1 1 2010 TRUE TRUE
# 2 2 1 2011 TRUE TRUE
# 3 3 1 2012 TRUE TRUE
# 4 4 1 2013 TRUE TRUE
# 5 5 2 2010 FALSE TRUE
# 6 6 2 2011 FALSE TRUE
# 7 7 2 2013 FALSE TRUE
# 8 8 3 2010 FALSE FALSE
# 9 9 3 2012 FALSE FALSE
# 10 10 4 2012 FALSE FALSE
(您可以pull
领取所需的东西)
filter(ex_df2, fouryears) %>% pull(id)
# [1] 1 2 3 4
filter(ex_df2, threeyears) %>% pull(id)
# [1] 1 2 3 4 5 6 7