将数据框/矩阵转换为R

时间:2016-06-17 03:08:59

标签: r list for-loop matrix

我有一个长矩阵(ncol = 6,nrow = 50,000,000 +)。我想将其转换为矩阵列表,其中:

[i,4]和[i,5]是列表的名称(或键),

[i,1]是日期,

[i,2]和[i,3]是一天中的时间,

[i,6]是要存储在列表中的值。

列表中的矩阵都是相同的维度。

for (i in seq(1, nrow(a2015_15))) {
    OD_L_2015_15[[
        paste(a2015_15[i,4], a2015_15[i,5])
        ]] [
            a2015_15[i,1], paste(a2015_15[i,2], a2015_15[i,3]) 
            ] = 
        as.numeric(a2015_15[i,6])
}

按原样,运行需要一两个小时,这对于速度较慢的计算机尤其如此。

有什么建议可以使用apply语句更快地运行吗? 我试图将调用限制为2015 - 15(通过保存a2015_15 [i,]然后引用它)但它似乎没有帮助。

感谢。

编辑: 这是我想要改变的矩阵:

Matrix

该列表将分为: OD_L_2015_15 [[密钥1,密钥2]] [日期,C(时间,时间2)] =值

1 个答案:

答案 0 :(得分:0)

赋值操作似乎是可矢量化的,即如果它适用于i的一个值,它也应该成功为i的矢量。 。你有没有尝试过:

i <-  seq(1,nrow(a2015_15))
OD_L_2015_15 <- list()
OD_L_2015_15[[ paste(a2015_15[i,4], a2015_15[i,5])]] [
                                  a2015_15[i,1], paste(a2015_15[i,2], a2015_15[i,3]) ] <- 
as.numeric(a2015_15[i,6])

这是未经测试的,我依靠你对循环成功的肯定。如果您需要经过测试的解决方案,则应该发布此矩阵的较小版本,因为您的描述没有&#34;接地&#34;在&#34;现实&#34;那一刻。