当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 加速重塑R中的周期格式数据帧

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有一个以面向人的格式的纵向数据的数据集,如下: pid varA_1 varB_1 varA_2 varB_2 varA_3 varB_3 ...1 1 1 0 3 2 12 0 1 0 2 2 1...50k 1 0 1 3 1 0 这导致了大型数据帧,最少50k观测值和90个变量,最多可测量
我有一个以面向人的格式的纵向数据的数据集,如下:

pid varA_1 varB_1 varA_2 varB_2 varA_3 varB_3 ...
1   1      1      0      3      2      1
2   0      1      0      2      2      1
...
50k 1      0      1      3      1      0

这导致了大型数据帧,最少50k观测值和90个变量,最多可测量29个周期.

我希望得到一个更加面向时间的格式,如下:

pid index start stop varA varB varC ...
1   1     ...
1   2     
...
1   29
2   1

我已经尝试了不同的方法来重塑数据帧(* apply,plyr,reshape2,循环,追加与预填充所有数字矩阵等),但似乎没有得到适当的处理时间(子集为40分钟).我一路上已经收到了各种提示,但是我仍然不确定我是否会错过一些瓶颈或可能的加速.

有没有一种最佳的方法来处理这种数据处理,以便我可以评估我在纯R代码中可以实现的最佳处理时间? Stackoverflow上有similar questions,但它们并没有令人信服的答案……

首先,让我们构建数据示例(我使用的是5e3而不是50e3,以避免我的配置出现内存问题):

nObs <- 5e3
nVar <- 90
nPeriods <- 29

dat <- matrix(rnorm(nObs*nVar*nPeriods), nrow=nObs, ncol=nVar*nPeriods)

df <- data.frame(id=seq_len(nObs), dat)

nmsV <- paste('Var', seq_len(nVar), sep='')
nmsPeriods <- paste('T', seq_len(nPeriods), sep='')

nms <- c(outer(nmsV, nmsPeriods, paste, sep='_'))
names(df)[-1] <- nms

现在使用stats :: reshape更改格式:

df2 <- reshape(df, dir = "long", varying = 2:((nVar*nPeriods)+1), sep = "_")

我不确定这是否是您正在寻找的快速解决方案.

网友评论