如何在 data.table 物件中查詢分組後的公共值?


要查詢 data.table 物件的分組後的公共值,我們可以使用 Reduce 函式與 intersect 函式結合。

例如,如果我們有一個名為 DT 的 data.table 物件,其中包含一個數值列 Num 和一個分類列 C,其中 C 位於第一位,則可以透過使用以下命令找到分組後的公共值:

Reduce(intersect,DT[,.(list(unique(Num))),C]$V1)

示例

考慮以下 data.table 物件:

Group<-sample(LETTERS[1:4],20,replace=TRUE)
Rate<-rpois(20,1)
library(data.table)
DT1<-data.table(Group,Rate)
DT1

輸出

建立了以下資料框:

   Group Rate
1:  A    4
2:  C    0
3:  D    0
4:  C    0
5:  A    3
6:  A    1
7:  D    1
8:  B    0
9:  A    1
10: A    0
11: C    3
12: B    2
13: B    1
14: C    2
15: D    3
16: B    1
17: A    0
18: C    1
19: A    1
20: C    1

為了查詢 Group 列中所有組的 Rate 的分組後的公共值,請將以下程式碼新增到上述程式碼段中:

示例

Reduce(intersect,DT1[,.(list(unique(Rate))),Group]$V1)

輸出

如果您將以上所有程式碼段作為一個程式執行,它將生成以下輸出:

[1] 1 0

示例

考慮以下 data.table 物件:

Category<-sample(c("I","II","III"),20,replace=TRUE)
Rank<-sample(1:3,20,replace=TRUE)
DT2<-data.table(Category,Rank)
DT2

輸出

建立了以下資料框:

  Category Rank
1:    I    1
2:  III    2
3:  III    3
4:    I    2
5:    I    3
6:  III    3
7:  III    2
8:  III    2
9:  III    2
10:  II    3
11: III    2
12:  II    1
13: III    1
14:  II    3
15:   I    1
16: III    2
17: III    1
18:  II    1
19:   I    1
20: III    3

要查詢 Category 列中所有組的 Rank 的分組後的公共值,請將以下程式碼新增到上述程式碼段中:

示例

Reduce(intersect,DT2[,.(list(unique(Rank))),Category]$V1)

輸出

如果您將以上所有程式碼段作為一個程式執行,它將生成以下輸出:

[1] 1 3

示例

考慮以下 data.table 物件:

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Score<-sample(0:2,20,replace=TRUE)
DT3<-data.table(Class,Score)
DT3

輸出

建立了以下資料框:

    Class  Score
1:  First   2
2:  Second  0
3:  First   1
4:  Third   2
5:  Second  1
6:  Third   1
7:  Third   0
8:  Third   1
9:  Third   2
10: Third   1
11: Second  0
12: Third   0
13: First   2
14: First   1
15: First   1
16: First   0
17: Second  2
18: Second  2
19: First   0
20: Second  1

要查詢 Class 列中所有組的 Score 的分組後的公共值,請將以下程式碼新增到上述程式碼段中:

示例

Reduce(intersect,DT3[,.(list(unique(Score))),Class]$V1)

輸出

如果您將以上所有程式碼段作為一個程式執行,它將生成以下輸出:

[1] 2 1 0

更新於:2021年11月2日

101 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.