将表格结果转换为R中的变量(增加数据维度)(用于可视化)
我不知道如何表达这个问题。我有一些数据,我想把它们转换成不同的格式(甚至可能是一个数组),这样我就可以矢量化它了。这不是很具体,所以这里有一个简化的例子: 我有一个类似dt的文件,比如:将表格结果转换为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
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