如何将R数据帧转换为列表列表?

问题描述 投票:0回答:1

我有一个数据框,其中包含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"

我想将此操作应用于一百万行,请提出一个有效的解决方案

r list dataframe dplyr tidyr
1个回答
0
投票

由于您需要嵌套列表,我们可以使用嵌套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"
© www.soinside.com 2019 - 2024. All rights reserved.