在R中查找状态更改

时间:2016-09-10 20:04:28

标签: r dplyr

我正在处理一些有候选人名单的州选举数据 谁在不同年份奔跑。有一个项目,他们中的一些人参与了,我有兴趣看看为什么候选人进出该计划。我想要的是那些参加了几年而不是其他人的名单。我想从列表中删除所有永远或永不参与的候选人。

数据看起来有点像这样:

         names program year
1   Smith John       1 2008
2   Smith John       1 2010
3  Oliver Mary       0 2008
4  Oliver Mary       1 2010
5  Oliver Mary       1 2012
6 O'Neil Cathy       0 2010
7 O'Neil Cathy       1 2012

所以在这种情况下,我想在列表中收集Mary Oliver和Cathy O'Neil,但不是John Smith。我想在dplyr中使用group_by,但我不确定下一步该去哪里。有关如何设置此操作的任何想法?

1 个答案:

答案 0 :(得分:1)

尝试过滤出program列中值的总和小于names列中每个名称的行数的那些。以下应该做,我想:

数据:

df1 <- structure(list(names = c("Smith John", "Smith John", "Oliver Mary", 
"Oliver Mary", "Oliver Mary", "ONeil Cathy", "ONeil Cathy"), 
    program = c(1L, 1L, 0L, 1L, 1L, 0L, 1L), year = c(2008L, 
    2010L, 2008L, 2010L, 2012L, 2010L, 2012L)), .Names = c("names", 
"program", "year"), class = "data.frame", row.names = c(NA, -7L
))

代码:

df1 %>% group_by(names) %>% dplyr::filter(sum(program) != n())

输出:

        names program  year
        <chr>   <int> <int>
1 Oliver Mary       0  2008
2 Oliver Mary       1  2010
3 Oliver Mary       1  2012
4 ONeil Cathy       0  2010
5 ONeil Cathy       1  2012

我希望这会有所帮助。