我想要将我的数据从短格式转换成长格式,我想有一种简单的方法可以做到这一点(可能使用reshape2、plyr、dplyr等?)。
例如,我有:
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。也就是说,我希望生成:
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”的最大值。也就是说,我想要产生:
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已经在做的事情了,但我只是不知道去哪里看。无论如何,任何避免循环的解决方案都是有帮助的。
发布于 2014-10-02 11:16:19
使用dplyr (和magritte以提高易读性):
library(magrittr)
library(dplyr)
foo[rep(1:nrow(foo), foo$time), ] %>%
group_by(id) %>%
mutate(y = !duplicated(y, fromLast = TRUE),
time = 1:n())希望能有所帮助
https://stackoverflow.com/questions/26152999
复制相似问题