我有一个数据框,其中包含3列ID,类别,item_id。我想按向量中的ID,类别和item_id分组
df <- data.table(ID=c(1,1,1,2,2,2),
category=c("A", "A", "B", "B", "B", "A"),
item_id=c("1a", "2a", "1b","2b", "2b", "2a" ))
> df
ID category item_id
1: 1 A 1a
2: 1 A 2a
3: 1 B 1b
4: 2 B 2b
5: 2 B 2b
6: 2 A 2a
我想将上面的数据框转换为以item_id为向量的列表的列表。我希望上面的表格采用下面的列表格式。
df2 <- list("1"=list("A"=c("1a", "2a"), "B"=c("2b")),
"2"=list("A"=c("2a"), "B"=c("2b" ,"2b")))
> df2
$`1`
$`1`$A
[1] "1a" "2a"
$`1`$B
[1] "2b"
$`2`
$`2`$A
[1] "2a"
$`2`$B
[1] "2b" "2b"
我想将此操作应用于一百万行,请提出一个有效的解决方案
由于您需要嵌套列表,我们可以使用嵌套split
:
lapply(split(df[, -1], df$ID), function(x) split(x$item_id, x$category))
#$`1`
#$`1`$A
#[1] "1a" "2a"
#$`1`$B
#[1] "1b"
#$`2`
#$`2`$A
#[1] "2a"
#$`2`$B
#[1] "2b" "2b"