我有一个清单如下:
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)
谢谢!
tapply如果您想坚持使用基本功能,您也可以使用:
tapply(dat$value,dat$id,c)
$`4`
[1] 600 899
$`7`
[1] 19
$`13`
[1] 4930 300
Run Code Online (Sandbox Code Playgroud)
编辑:
对于您编辑的问题,我会选择split和lapply:
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)
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |