我有下面的df help.a
,我需要使用多个过滤操作来清理它。
help.a <- data.frame(id = as.factor(c("01", "01", "01", "01", "01", "04", "04", "05", "05", "05", "05", "05", "09", "09", "09", "09", "09")),
episode = c(3, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1),
count = c(1, 2, 3, 4, 5, 1, 2, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5),
var_a = c(73, 73, 73, 73, 73, 43, 43, 80, 80, 80, 80, 80, 73, 73, 73, 73, 42))
id episode count var_a
01 3 1 73
01 3 2 73
01 3 3 73
01 4 4 73
01 4 5 73
04 3 1 43
04 3 2 43
05 2 1 80
05 2 2 80
05 2 3 80
05 2 4 80
05 3 5 80
09 1 1 73
09 1 2 73
09 1 3 73
09 1 4 73
09 1 5 42
首先:我正在尝试删除任何小于3的ID(例如,id 4)
第二:我希望删除多个剧集的观看,同时保留第一个观察到的剧集(观察到的最低集数)
第三:我想仅使用相同的var_a
变量保留id观察值...如果有多个var_a
个观察值,我想只保留第一个观察到的变量(例如,id 9和var_a 73)
最后,我希望我的数据集看起来类似于下面的内容:
id episode count var_a
01 3 1 73
01 3 2 73
01 3 3 73
05 2 1 80
05 2 2 80
05 2 3 80
05 2 4 80
09 1 1 73
09 1 2 73
09 1 3 73
09 1 4 73
到目前为止,我的尝试使用以下代码完成了第1部分:
help.a %>% group_by(id) %>% filter(!n() <3)
然而,我仍然坚持如何告诉dplyr首先观察episode
并首先观察var.a
...任何建议都非常感谢。
答案 0 :(得分:1)
我们可以在分组后使用filter
中的所有三个条件来识别&#39; id&#39;
help.a %>%
group_by(id) %>% filter(n() >3 &
episode == first(episode) &
var_a == first(var_a))
# id episode count var_a
# <fctr> <dbl> <dbl> <dbl>
#1 01 3 1 73
#2 01 3 2 73
#3 01 3 3 73
#4 05 2 1 80
#5 05 2 2 80
#6 05 2 3 80
#7 05 2 4 80
#8 09 1 1 73
#9 09 1 2 73
#10 09 1 3 73
#11 09 1 4 73