Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用大数据集在R中循环,是更好的方法吗?_R_Loops_Csv_Rstudio - Fatal编程技术网

使用大数据集在R中循环,是更好的方法吗?

使用大数据集在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

亲爱的各位朋友:

目前,我有一个33列、1447499行的数据集

现在我想用新数据添加1个新列(Unix时间戳基于第33列中的日期)

我已经手动创建了第一个时间戳,然后每次都必须向时间戳添加5(ms),下面的代码有用吗

到目前为止我所做的:

# 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))

在保存过程中,您无法大大加快速度,因为您添加了一列,因此必须重写文件的每一行。这里的瓶颈是文件系统

要创建规则的数据序列(无论是字符串、数字还是日期和时间),可以使用标准的R
seq
函数

在您的情况下,指定参数
from
by
length.out
是实现您的目标最方便的方法:

PhoneSensorData$UnixTimestamp <- 
            seq(from = 1496944482155, by = 5, length.out = nrow(PhoneSensorData))

PhoneSensorData$UnixTimestamp您可以使用
.I
而不是生成
行数
,这样可以节省内存,而且可能会节省一点时间。这对我很有用!非常感谢,节省了我很多时间:)请尝试提供更详细、格式良好的答案。