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

将表格结果转换为R中的变量(增加数据维度)(用于可视化),r,vectorization,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 coun

我不知道如何表达这个问题。我有一些数据,我想把它们转换成不同的格式(甚至可能是一个数组),这样我就可以矢量化它了。这不是很具体,所以这里有一个简化的例子:

我有一个类似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        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

我们可以使用
dcast
创建“size”列,然后循环“size”列(
lappy(…
)并执行
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
library(重塑2)

dt1谢谢!这就成功了!我可能也会尝试在tidyr中使用spread()函数
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