热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

与dplyr中的"总结"相反:将一行变为多行

如何解决《与dplyr中的"总结"相反:将一行变为多行》经验,为你挑选了1个好方法。

是否有dplyr相反的功能,即将summarise一行变成多行?

让我们考虑一个看起来如下的data.frame:

> testdf <- data.frame(a=c(1,1,2,2), b=c(1,2,1,2))
> testdf <- data.frame(a1=c(1,1,2,2), a2=c(1,2,1,2))
> testdf$a3 <- replicate(4, rnorm(3), simplify = F)
> testdf
  a1 a2                                a3
1  1  1 -0.6264538, 0.1836433, -0.8356286
2  1  2  1.5952808, 0.3295078, -0.8204684
3  2  1   0.4874291, 0.7383247, 0.5757814
4  2  2  -0.3053884, 1.5117812, 0.3898432

我现在想把它变成一个4*3 = 12行的data.frame,其中每个单元格中的每个值都是原子的.换句话说,我想扩展专栏a3.结果应如下所示:

> resdf
   a1 a2         a3
1   1  1 -0.6264538
2   1  1  0.1836433
3   1  1 -0.8356286
4   1  2  1.5952808
5   1  2  0.3295078
6   1  2 -0.8204684
7   2  1  0.4874291
8   2  1  0.7383247
9   2  1  0.5757814
10  2  2 -0.3053884
11  2  2  1.5117812
12  2  2  0.3898432

请注意,在许多情况下可能会出现类似于上面所示的data.frames,例如在处理大量数据时(出于内存效率的原因).在这个问题中要求类似的功能.

我知道有些解决方案没有使用dplyr,但我对使用它感兴趣,因为我想为groups(group_by(a2))数据子集执行此操作.



1> BrodieG..:

这似乎是不可能的,但目前版本为0.5 的开发人员正在积极讨论.

注意data.table目前允许这个(参见@ akrun的注释),并且还允许您使用任意大小的组输入具有任意大小的组输出,而看起来正在讨论的解决方案dplyr将要求所有组具有相同的大小.这是一个例子:

> data.table(a=1:3)[, paste(a, seq(a), sep=":"), by=a]
   a  V1
1: 1 1:1
2: 2 2:1
3: 2 2:2
4: 3 3:1
5: 3 3:2
6: 3 3:3

另外,根据@ AlexBrown的评论,您可以:

unnest(testdf, a3)

对于您的具体示例,但由于上述原因,这似乎不适用于group_by/ summarizeworkflow(即您无法testdf直接使用dplyr::group_byAFAIK 创建).


推荐阅读
author-avatar
ds87vdsa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有