处理大数据帧时减少计算时间的最佳方法是什么?

时间:2017-02-16 22:51:54

标签: r bigdata

我有一个大数据框,由RStudio服务器中的9个mio对象组成,格式如下(每个installnr有很多读数),当我运行脚本时,计算每小时所有读数的平均值和标准误差条,R崩溃了。避免大量计算时间和超出内存大小的最佳方法是什么?

       installnr readdate   readings
    1    002345 2014-08-17 {0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,2,0}
    2    002345 2014-08-18 {0,0,0,0,0,0,4,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1}
    3    002345 2014-08-19 {0,1,2,1,0,1,1,1,2,0,1,0,1,0,1,0,1,0,1,0,2,1,1,0}
    4    013459 2014-08-17 {1,0,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,1,3,1,0,0,1,1}
    5    127465 2014-08-19 {0,1,0,0,1,0,1,1,1,0,0,1,2,0,1,0,0,1,1,0,0,1,1,1}

我正在运行的脚本示例如下:

df$readings = gsub("[{}]", "", as.character(df$readings))
Read1 = strsplit(df$readings, ",")
Readings = matrix(as.numeric(unlist(Read1)), nrow=length(Read1))
colMeans(Readings)

1 个答案:

答案 0 :(得分:0)

如果您想坚持输入格式,这里有一个可能适合您的解决方案。

首先,安装并加载包stringrdata.table

第二次,从读数中提取数字并创建数据表:

dt <- data.table(str_extract_all(df$readings,"[0-9]+", simplify=TRUE))

请注意,正则表达式[0-9]+采用整数值。

第三次,将整个数据表从chr转换为数字:

dt <- dt[, lapply(.SD, as.numeric)]

现在,使用dt[, lapply(.SD, mean)]计算每个列的平均值。

当然,您也可以使用lapply(dt, mean)

相关问题