簡體   English   中英

在R中的data.table中按多行分配組

[英]Assigning groups by multiple rows in data.table in R

我有一個包含個人和一些屬性的data.table:

dt=data.table(individual=c(1,1,1,2,2,2,3,3,3), attribute=c("a","b", "c", "d", "e", "f", "a", "b", "c"))

我想通過屬性列的組合對個人進行分組,以便具有屬性“ a”,“ b”和“ c”的個人1和3將在組1中,而個人2將在組2中。 。

這是一種方法

dt[, allAts := Reduce(paste0, sort(attribute)), by=individual
   ][, group := as.integer(factor(allAts))]

哪個返回

dt
   individual attribute allAts group
1:          1         a    abc     1
2:          1         b    abc     1
3:          1         c    abc     1
4:          2         d    def     2
5:          2         e    def     2
6:          2         f    def     2
7:          3         a    abc     1
8:          3         b    abc     1
9:          3         c    abc     1

第一條鏈使用Reduce將已排序的屬性粘貼到每個人的名為allAts的變量中。 第二條鏈使用allAts構造一個因子變量,然后將其轉換為整數。 如果需要,可以通過在末尾添加鏈[, allAts := NULL]來刪除allAts變量。


@Frank建議的替代方法是將data.table .GRP關鍵字與by值一起使用,而不是將基數R as.integerfactor (因為此counter關鍵字已優化;請參見?GForce ); 並在i使用order而不是在jsort (因為這意味着更少的排序調用):

dt[order(attribute), allAts := paste(attribute, collapse=""), by=individual
   ][, group := .GRP, by=allAts]

產生相同的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM