首页 > 解决方案 > 具有值的过滤因子

问题描述

我想过滤一个我有变量的基础idyearvalue

structure(list(id = c(
  70101L, 70101L, 70101L, 70102L, 70102L,
  70102L, 70102L, 70102L, 70103L, 70103L, 70103L, 70103L, 70103L,
  70103L, 70104L, 70104L, 70104L, 70104L, 70104L, 70104L
), year = c(
  2013L,
  2014L, 2015L, 2013L, 2014L, 2015L, 2016L, 2017L, 2013L, 2014L,
  2015L, 2016L, 2017L, 2018L, 2013L, 2014L, 2015L, 2016L, 2017L,
  2018L
), value = c(
  4.68, 4.76, 5.14, 4.48, 4.71, 4.24, 5.13, 5.22,
  5.13, 5.05, 4.96, 5.09, 8.09, 7.82, 3.57, 7.96, 1.83, 4.56, 11,
  10.6
)), row.names = c(NA, -20L), class = "data.frame")

目标

过滤仅包含 2013 年到 2018 年完整信息的 id

     id      year value
     <fct>  <dbl> <dbl>
1   070103  2013  5.13
2   070103  2014  5.05
3   070103  2015  4.96
4   070103  2016  5.09
5   070103  2017  8.09
6   070103  2018  7.82
7   070104  2013  3.57
8   070104  2014  7.96
9   070104  2015  1.83
10  070104  2016  4.56
11  070104  2017 11.0 
12  070104  2018 10.6 

标签: rdplyr

解决方案


这可以像这样实现:

library(dplyr)

d <- structure(list(id = c(
  70101L, 70101L, 70101L, 70102L, 70102L,
  70102L, 70102L, 70102L, 70103L, 70103L, 70103L, 70103L, 70103L,
  70103L, 70104L, 70104L, 70104L, 70104L, 70104L, 70104L
), year = c(
  2013L,
  2014L, 2015L, 2013L, 2014L, 2015L, 2016L, 2017L, 2013L, 2014L,
  2015L, 2016L, 2017L, 2018L, 2013L, 2014L, 2015L, 2016L, 2017L,
  2018L
), value = c(
  4.68, 4.76, 5.14, 4.48, 4.71, 4.24, 5.13, 5.22,
  5.13, 5.05, 4.96, 5.09, 8.09, 7.82, 3.57, 7.96, 1.83, 4.56, 11,
  10.6
)), row.names = c(NA, -20L), class = "data.frame")

d %>%
  group_by(id) %>%
  filter(all(c(2013:2018) %in% year))
#> # A tibble: 12 x 3
#> # Groups:   id [2]
#>       id  year value
#>    <int> <int> <dbl>
#>  1 70103  2013  5.13
#>  2 70103  2014  5.05
#>  3 70103  2015  4.96
#>  4 70103  2016  5.09
#>  5 70103  2017  8.09
#>  6 70103  2018  7.82
#>  7 70104  2013  3.57
#>  8 70104  2014  7.96
#>  9 70104  2015  1.83
#> 10 70104  2016  4.56
#> 11 70104  2017 11   
#> 12 70104  2018 10.6

推荐阅读