[英]remove rows at certain intervals in the data frame
我有一个如下的数据框
structure(list(c1 = c(1, 2, 3, 1, 2, 3, 1, 2, 3, 3, 2, 1, 3,
2, 1, 3, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1), c2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a", "b",
"c"), class = "factor")), .Names = c("c1", "c2"), row.names = c(NA,
-27L), class = "data.frame")
c1 c2
1 1 a
2 2 a
3 3 a
4 1 a
5 2 a
6 3 a
7 1 a
8 2 a
9 3 a
10 3 b
11 2 b
12 1 b
13 3 b
14 2 b
15 1 b
16 3 b
17 2 b
18 1 b
19 2 c
20 3 c
21 1 c
22 2 c
23 3 c
24 1 c
25 2 c
26 3 c
27 1 c
在上面的数据帧中,有3组(1,2,3)对应a
,3组(3,2,1)对应b
和3组(2,3,1)对应c
。 我想做的是仅对a
, b
和c
分别说两组。 有没有一线解决方案?
输出将如下所示
c1 c2
1 1 a
2 2 a
3 3 a
4 1 a
5 2 a
6 3 a
7 3 b
8 2 b
9 1 b
10 3 b
11 2 b
12 1 b
13 2 c
14 3 c
15 1 c
16 2 c
17 3 c
18 1 c
注意:每个c2
类别的组的初始数目可以是任意值(此处为3),并且不能事先知道,因此解决方案必须独立于该组的初始数目。
这是一个使用data.table的选项。 假设df
是您的原始数据。
library(data.table)
setDT(df)
df[sort(df[, .I[1:2], by = .(c1, c2)]$V1)]
我们要保留的组数由1:2
(前两个)给出。 因此,如果您想要更多或更少,则可以将2更改为想要保留的任意多个组。 上面的代码给出
c1 c2
1: 1 a
2: 2 a
3: 3 a
4: 1 a
5: 2 a
6: 3 a
7: 3 b
8: 2 b
9: 1 b
10: 3 b
11: 2 b
12: 1 b
13: 2 c
14: 3 c
15: 1 c
16: 2 c
17: 3 c
18: 1 c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.