首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将data.frame扩展为长格式和增量值

将data.frame扩展为长格式和增量值
EN

Stack Overflow用户
提问于 2014-10-02 09:01:33
回答 4查看 364关注 0票数 3

我想要将我的数据从短格式转换成长格式,我想有一种简单的方法可以做到这一点(可能使用reshape2、plyr、dplyr等?)。

例如,我有:

代码语言:javascript
运行
复制
foo <- data.frame(id = 1:5, 
              y = c(0, 1, 0, 1, 0),
              time = c(2, 3, 4, 2, 3))

id y time
1  0  2
2  1  3
3  0  4
4  1  2
5  0  3

我想将每行扩展/复制n次,其中n是该行在"time“列中的值。但是,我也希望变量"time“从1递增到n。也就是说,我希望生成:

代码语言:javascript
运行
复制
id  y time
1   0   1
1   0   2
2   1   1
2   1   2
2   1   3
3   0   1
3   0   2
3   0   3
3   0   4
4   1   1
4   1   2
5   0   1
5   0   2
5   0   3

作为奖励,我还想对变量"y“进行一种递增,其中对于y= 1的I,y被设置为0,直到"time”的最大值。也就是说,我想要产生:

代码语言:javascript
运行
复制
id  y time
1   0   1
1   0   2
2   0   1
2   0   2
2   1   3
3   0   1
3   0   2
3   0   3
3   0   4
4   0   1
4   1   2
5   0   1
5   0   2
5   0   3

这似乎是dplyr已经在做的事情了,但我只是不知道去哪里看。无论如何,任何避免循环的解决方案都是有帮助的。

EN

Stack Overflow用户

发布于 2014-10-02 11:16:19

使用dplyr (和magritte以提高易读性):

代码语言:javascript
运行
复制
library(magrittr)
library(dplyr)

foo[rep(1:nrow(foo), foo$time), ] %>%
    group_by(id) %>%
    mutate(y = !duplicated(y, fromLast = TRUE),
                  time = 1:n())

希望能有所帮助

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26152999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档