我正在尝试从data.frame中删除一些行。这些唯一行位于我的data.frame的每个第3组中。
这是示例df
set.seed(1)
AC <- rep(rep(c(78,110),each=1),times=18)
state <- rep(rep(c("Group 1","Group 2"),3),each=12)
V <- rep(seq(100,400,100),times=9)
R = sort(replicate(9, sample(5000:6000,4)))
df <- data.frame(AC,V,R,state)
头(DF)
AC V R state
1 78 100 5001 Group 1
2 110 200 5054 Group 1
3 78 300 5064 Group 1
4 110 400 5069 Group 1
5 78 100 5117 Group 1
6 110 200 5123 Group 1
通过V
列中的更改对它们进行排序。每100:400序列中V
列发生更改。因此,每3
行中的state
个组都会发生变化。
我想删除每个组中的3rd
组
我认为添加No
列以删除此3rd
列可能也很有用。我在这里提供的示例已经group_by
,所以我只需要添加新的No
列并删除data.frame组的第3,第6,第9 ......。
我希望在dplyr
链中进行此过程。因为我在dplyr
链中处理我的真实数据。但我欢迎任何其他功能来做到这一点。
我寻找的输出
No AC V R state
1 78 100 5001 Group 1
1 110 200 5008 Group 1
1 78 300 5022 Group 1
1 110 400 5055 Group 1
2 78 100 5133 Group 1
2 110 200 5163 Group 1
2 78 300 5187 Group 1
2 110 400 5189 Group 1
4 78 100 5459 Group 2
4 110 200 5467 Group 2
4 78 300 5471 Group 2
4 110 400 5501 Group 2
5 78 100 5515 Group 2
5 110 200 5531 Group 2
5 78 300 5540 Group 2
5 110 400 5553 Group 2
7 78 100 5686 Group 1
7 110 200 5717 Group 1
7 78 300 5726 Group 1
7 110 400 5755 Group 1
***********************
答案 0 :(得分:2)
有点难以理解你的问题,因为当我复制你可重复的例子时,我的数据帧不等于你的。但据我了解,你只想对每组4行进行编号(根据V
)并删除每三行。
在这种情况下,请尝试:
df %>%
mutate(No = cumsum(df$V == 100)) %>%
subset(No %% 3 != 0)
第二行使用df$V == 100
表示“开始新的Vs块”以分配号码。
在回复你对Q的评论时,我没有在这里使用state
列(如在可重现的示例中,每个(州,V)都有 9 行而不是 3 如问题中所述...)
请注意,这假设df
已按上述问题排序(Vs为(100,200,300,400)重复顺序,且状态每12行交替一次)