使用大数据集在R中循环,是更好的方法吗?
亲爱的各位朋友: 目前,我有一个33列、1447499行的数据集 现在我想用新数据添加1个新列(Unix时间戳基于第33列中的日期) 我已经手动创建了第一个时间戳,然后每次都必须向时间戳添加5(ms),下面的代码有用吗 到目前为止我所做的:使用大数据集在R中循环,是更好的方法吗?,r,loops,csv,rstudio,R,Loops,Csv,Rstudio,亲爱的各位朋友: 目前,我有一个33列、1447499行的数据集 现在我想用新数据添加1个新列(Unix时间戳基于第33列中的日期) 我已经手动创建了第一个时间戳,然后每次都必须向时间戳添加5(ms),下面的代码有用吗 到目前为止我所做的: # Data loading is fine PhoneSensorData$UnixTimestamp <- 0 lengte = nrow(PhoneSensorData) PhoneSensorData$UnixTimestamp[1] = 14
# Data loading is fine
PhoneSensorData$UnixTimestamp <- 0
lengte = nrow(PhoneSensorData)
PhoneSensorData$UnixTimestamp[1] = 1496944482155
for (i in 1:lengte) {
PhoneSensorData$UnixTimestamp[i] = 1496944482155 + (5*i)
}
#数据加载正常
PhoneSensorData$UnixTimestamp在R中,不应使用for循环来创建/编辑新列。
它们是基于向量的运算,R非常擅长基于向量的运算
使用data.table,您可以使用以下代码执行此操作:
library(data.table)
PhoneSensorData <- data.table(PhoneSensorData)
PhoneSensorData[, RowNumber := 1:.N]
PhoneSensorData[, UnixTimeStamp := 1496944482155 + RowNumber * 5 ]
fwrite(PhoneSensorData, file="PhoneSensorData.csv")
库(data.table)
PhoneSensorData由于矢量化,这应该快得多:
PhoneSensorData$UnixTimestamp = 1496944482155 + (5*(1:lengte))
在保存过程中,您无法大大加快速度,因为您添加了一列,因此必须重写文件的每一行。这里的瓶颈是文件系统 要创建规则的数据序列(无论是字符串、数字还是日期和时间),可以使用标准的Rseq
函数
在您的情况下,指定参数from
、by
和length.out
是实现您的目标最方便的方法:
PhoneSensorData$UnixTimestamp <-
seq(from = 1496944482155, by = 5, length.out = nrow(PhoneSensorData))
PhoneSensorData$UnixTimestamp您可以使用.I
而不是生成行数
,这样可以节省内存,而且可能会节省一点时间。这对我很有用!非常感谢,节省了我很多时间:)请尝试提供更详细、格式良好的答案。