繁体   English   中英

在数据框中以特定间隔删除行

[英]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 我想做的是仅对abc分别说两组。 有没有一线解决方案?

输出将如下所示

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM