[英]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.