r - 从长列到 grup 列表的 data.table
问题描述
我正在尝试将所有值按组“粘贴”到列表中。类似于 paste(x, collapse="-") 所做的事情,但输出应该是一个列表。我设法将其分为两个步骤。可以一步完成吗?
library("data.table")
d <- data.table( sample(letters, 100, replace = T), sample(LETTERS,100, replace = T)) %>% unique
d[, paste0(V2, collapse = "--"), by=V1] %>% head
V1 V1
1: m E--T--L--Q
2: k J--H--W--P--X
3: v D--W--X
4: g H--E--I
5: c K--U--X--H--Y--N
6: l O--H--J--R--U
dd <- split(d, by="V1", keep.by=FALSE)
data.table(names(dd), sapply(dd, "[") ) %>% head
V1 V2
1: m E,T,L,Q
2: k J,H,W,P,X
3: v D,W,X
4: g H,E,I
5: c K,U,X,H,Y,N
6: l O,H,J,R,U
我也尝试过使用移位,但没有成功R data.table 按组创建列表列
解决方案
我们可以把它包装在一个list
dd <- d[, .(V2 = list(V2)), V1]
head(dd)
# V1 V2
#1: c Z,W,K,G,Q,A
#2: a V,X,T,D,K
#3: w Z,I,N
#4: u N,Y,H,U,M,Z,...
#5: d G,M,D,B
#6: q O,Z,K,V,I,X,...
str(dd)
#Classes ‘data.table’ and 'data.frame': 25 obs. of 2 variables:
# $ V1: chr "c" "a" "w" "u" ...
# $ V2:List of 25
# ..$ : chr "Z" "W" "K" "G" ...
# ..$ : chr "V" "X" "T" "D" ...
# ..$ : chr "Z" "I" "N"
# ..$ : chr "N" "Y" "H" "U" ...
# ..$ : chr "G" "M" "D" "B"
# ..
推荐阅读
- swift - 获取 alamofire 请求以在命令行应用程序中执行
- python - 如何使用 np.where() / np.select() 或 pandas/python 中的一些更好的方法执行计算?
- javascript - 如何在 OS 播放器小部件中更改缩略图
- php - MySQL - 从 5.7 迁移到 8 问题,将“function”更改为“job_title”
- r - R:减少分位数回归结果中的图数
- javascript - 如何在不使用 setState 的情况下显示 react-redux 状态值?
- qt - 如何在 Qt 3D 中将法线贴图添加到材质?
- amazon-web-services - 如何将 AWS S3 REST API ListObjects(v2) 与多个父/子存储桶目录一起使用?
- android - 如果我的测试目录下的 widget_test.dart 文件显示错误,有什么问题吗?
- batch-file - 批处理循环并删除某些文件夹