[英]How to quickly split a data.table in R based on factor column into a list?
具有所需結果的示例(通過硬編碼實現)
DT <- data.table(val=1:8, f=c('a','b','b','a','b','a','a','c'))
required <- list(DT[f=='a'], DT[f=='b'], DT[f=='c'])
類"data.table"
對象有一個split
方法。 但是,與在基礎R對data.frames方法,有一種說法by
認為需要引用列名。
從help('split.data.table')
,我的重點:
細節
參數 f 只是為了在使用上與 data.frame 方法保持一致。 推薦使用 by argument ,它會更快,更靈活,並且默認會根據數據中的順序保留順序。
split(DT, by = 'f')
#$a
# val f
#1: 1 a
#2: 4 a
#3: 6 a
#4: 7 a
#
#$b
# val f
#1: 2 b
#2: 3 b
#3: 5 b
#
#$c
# val f
#1: 8 c
相反的是rbindlist
。 它給出了原始 DT,其中的行按a
、 b
、 c
順序排列。
rbindlist(split(DT, by = 'f'))
# val f
#1: 1 a
#2: 4 a
#3: 6 a
#4: 7 a
#5: 2 b
#6: 3 b
#7: 5 b
#8: 8 c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.