【问题标题】:R Loop optimisation/ Loop is way too time consumingR循环优化/循环太耗时
【发布时间】:2016-12-07 22:24:49
【问题描述】:

以下循环需要很长时间。有什么方法可以更省时吗?以下 data.table 包含 27 个变量和超过 60 万个观测值。

data <- read.table("file.txt", header = T, sep= "|")
colnames(data)[c(1)] <- c("X")
data <- as.data.table(data)
n=1;
vector <- vector()
for(i in 2:nrow(data))
{
  if(data[["X"]][i] != data[["X"]][i-1])
  {
   n=1; vector[i]=1} 
 else {
   n=n+1; vector[i]=n}}

基本上,我需要索引 X 中唯一条目的每次出现,即第一次出现、第二次出现等,然后将其合并到现有数据中作为附加列。但是,我在编译矢量时得到了股票。

谢谢。

【问题讨论】:

  • 更耗时的方式?
  • vector 在哪里发起?
  • 还有n在哪里发起...
  • 我想你想要像data[, v := rowid(X)] 这样的东西。当您不提供示例数据并编辑不是首先创建的“向量”时,很难将问题可视化。
  • 我的错,刚刚复制并粘贴了部分脚本...现在编辑。

标签: r for-loop optimization time data.table


【解决方案1】:

首先,使用fread

DT <- fread("file.txt", sep = "|")

接下来,使用setnames

setnames(DT, 1, "X")

最后,使用rowid

DT[ , vector := rowid(X)]    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2021-01-21
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多