我不确定如何说出这个问题。我有一些数据,我试图进入一个不同的格式(甚至可能是一个数组),以便我可以矢量化它。这不是非常具体,所以这是一个简单的例子:
我有像dt这样的文件,说:
set.seed(1)
time = 1:10
size <- round(runif(10), digits = 1)
count <- round(runif(10)*20)
dt <- data.frame(time,size, count)
dt
time size count
1 1 0.3 4
2 2 0.4 4
3 3 0.6 14
4 4 0.9 8
5 5 0.2 15
6 6 0.9 10
7 7 0.9 14
8 8 0.7 20
9 9 0.6 8
10 10 0.1 16
我想结束......
time size_0.1 size_0.2 size_0.3 size_0.4 size_0.6 size_0.7 size_0.9
1 1 0 0 4 0 0 0 0
2 2 0 0 0 4 0 0 0
3 3 0 0 0 0 14 0 0
4 4 0 0 0 0 0 0 8
5 5 0 15 0 0 0 0 0
6 6 0 0 0 0 0 0 10
7 7 0 0 0 0 0 0 14
8 8 0 0 0 0 0 20 0
9 9 0 0 0 0 8 0 0
10 10 16 0 0 0 0 0 0
将size变量的所有可能结果作为新变量引入。 然后做一个累积的总和得到这样的东西,但实际上前一步是最棘手的:
time size_0.1 size_0.2 size_0.3 size_0.4 size_0.6 size_0.7 size_0.9
1 1 0 0 4 0 0 0 0
2 2 0 0 4 4 0 0 0
3 3 0 0 4 4 14 0 0
4 4 0 0 4 4 14 0 8
5 5 0 15 4 4 14 0 8
6 6 0 15 4 4 14 0 18
7 7 0 15 4 4 14 0 32
8 8 0 15 4 4 14 20 32
9 9 0 15 4 4 22 20 32
10 10 16 15 4 4 22 20 32
答案 0 :(得分:1)
我们可以使用dcast
来创建&#39;尺寸&#39;列,然后循环大小&#39;列(lapply(...
)并执行cumsum
。
library(reshape2)
dt1 <- dcast(dt, time~paste0('size_', size), value.var='count', fill=0)
dt1[-1] <- lapply(dt1[-1], cumsum)
dt1
# time size_0.1 size_0.2 size_0.3 size_0.4 size_0.6 size_0.7 size_0.9
#1 1 0 0 4 0 0 0 0
#2 2 0 0 4 4 0 0 0
#3 3 0 0 4 4 14 0 0
#4 4 0 0 4 4 14 0 8
#5 5 0 15 4 4 14 0 8
#6 6 0 15 4 4 14 0 18
#7 7 0 15 4 4 14 0 32
#8 8 0 15 4 4 14 20 32
#9 9 0 15 4 4 22 20 32
#10 10 16 15 4 4 22 20 32