将矩阵重塑为列表列表

eyk*_*nal 1 r

我有一个清单如下:

 id | value
 ----------
  4     600
  4     899
  7      19
 13    4930
 13     300
  :       :
Run Code Online (Sandbox Code Playgroud)

ID有多个重复,每个重复都有唯一的值。我想把它变成如下所示:

id |  list
----------
 4    c(600, 899)
 7    c(19)
13    c(4930, 300)
 :    :
Run Code Online (Sandbox Code Playgroud)

有没有一种矢量化方法可以实现这一点?


编辑:扩展第一个问题,是否有一种简单的方法可以对通用 MxN 矩阵执行相同的操作?即,转动这个:

 id | value1  value2
 -------------------
  4     600        a
  4     899        b
  7      19        d
 13    4930        e
 13     300        a
  :       :        :
Run Code Online (Sandbox Code Playgroud)

进入这个:

id |  list
----------
 4    list(c(600, 899),c('a','b'))
 7    list(c(19),c('b'))
13    list(c(4930, 300),c('e','a'))
 :    :
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jam*_*mes 5

tapply如果您想坚持使用基本功能,您也可以使用:

tapply(dat$value,dat$id,c)
$`4`
[1] 600 899

$`7`
[1] 19

$`13`
[1] 4930  300
Run Code Online (Sandbox Code Playgroud)

编辑:

对于您编辑的问题,我会选择splitlapply

x <- lapply(split(dat[2:3],dat$id),c,use.names=F)

dput(x)
structure(list(`4` = list(c(600, 899), c("a", "b")), `7` = list(
19, "d"), `13` = list(c(4930, 300), c("e", "a"))), .Names = c("4", "7", "13"))
Run Code Online (Sandbox Code Playgroud)