我正在处理一些有候选人名单的州选举数据 谁在不同年份奔跑。有一个项目,他们中的一些人参与了,我有兴趣看看为什么候选人进出该计划。我想要的是那些参加了几年而不是其他人的名单。我想从列表中删除所有永远或永不参与的候选人。
数据看起来有点像这样:
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,但我不确定下一步该去哪里。有关如何设置此操作的任何想法?
答案 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
我希望这会有所帮助。