簡體   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