将表的结果转换为R中的变量(增加数据的维度)(用于可视化)

时间:2015-11-22 15:47:14

标签: r vectorization

我不确定如何说出这个问题。我有一些数据,我试图进入一个不同的格式(甚至可能是一个数组),以便我可以矢量化它。这不是非常具体,所以这是一个简单的例子:

我有像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

1 个答案:

答案 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