【问题标题】:For Loop for 1million data is taking large time. How to come out of for loop100 万条数据的 For Loop 需要花费大量时间。如何跳出for循环
【发布时间】:2014-03-31 07:42:44
【问题描述】:

样本数据 动作广告名称 加载
bServed Leanardo Vertical Tie Horizo​​ntal 单击 Leanardo Vertical Tie Horizo​​ntal 加载
bServed The Label Vineet 加载
加载
加载
加载
bServed Clooney the label 关闭标签克鲁尼 加载
加载
加载
bServed Angad Vertical Clooney Horizo​​ntal 关闭 Angad Vertical Clooney Horizo​​ntal

我需要通过比较我在 Excel 中实际使用的之前生成的 IF(Advertname3=Advertname2,Adblk2,Adblk2+1) 来对广告名称进行编号

动作广告名称 AdBlk 负载 1 bServed Leanardo Vertical Tie Horizo​​ntal 2 点击 Leanardo Vertical Tie Horizo​​ntal 2 负载 3 bServed The Label Vineet 4 加载 5 加载 5 加载 5 加载 5 bServed Clooney the label 6 关闭 克鲁尼标签 6 加载 7 加载 7 加载 7 bServed Angad Vertical Clooney Horizo​​ntal 8 关闭 Angad Vertical Clooney Horizo​​ntal 8

我正在处理大小超过一百万的点击流数据。我正在尝试创建基于广告编号的广告名称以进行排序,因为第二个没有及时记录。

ID_Sort[1,24] <- 1
for(i in 2:nrow(ID_Sort))
 {
  if(ID_Sort[i,14] == ID_Sort[(i-1),14])
  {
  a <- ID_Sort[(i-1),24]
  ID_Sort[i,24] <- a
  }
  else
  {
  a <- ID_Sort[(i-1),24]
  ID_Sort[i,24] <- a+1
  }
}

此代码适用于最短时间的示例数据,但对于超过 100 万个数据需要很长时间。所以请帮助我克服这种延迟。有什么办法可以代替 FOR 循环。

【问题讨论】:

  • 你听说过break吗?
  • 不,你能帮我了解一下吗,因为我是编程新手。
  • 我不知道r mate
  • 阅读here 了解如何制作一个可重复的小示例。您可以编辑原始问题以包含数据。
  • 可能会加速您的代码的一个更改是删除定义a 的两行并使用例如ID_Sort[i,24] &lt;- ID_Sort[(i-1),24]ID_Sort[i,24] &lt;- ID_Sort[(i-1),24]+1。另一种可能性可能是创建一个只有两列的数据集,然后通过循环传递该数据集,而不是传递一个包含 24 列的数据集,因为循环只对两列进行操作。

标签: r performance for-loop


【解决方案1】:

我不确定这是否符合您的要求,或者它是否比您的代码更快,但我怀疑它可能是。虽然如下创建数据集的两个副本可能效率很低。

ID_Sort <- read.table(text='
    a  1  10
    b  1  10
    c  2  20
    d  2  20
    e  3  30
    f  3  30
', header=FALSE)

ID_Sort.c <- ID_Sort[-nrow(ID_Sort),2:3]
ID_Sort.b <- ID_Sort[-1            ,2:3]

V3 <- ifelse(ID_Sort.b$V2 == ID_Sort.c$V2, ID_Sort.c$V3, ID_Sort.c$V3+1)

ID_Sort$V3 <- c(1,V3)
ID_Sort

  V1 V2 V3
1  a  1  1
2  b  1 10
3  c  2 11
4  d  2 20
5  e  3 21
6  f  3 30

【讨论】:

  • 你好这不是我想要的
  • 已发布示例数据。
  • @sandeep 我建议您减少示例数据的大小并发布您想要的答案。这就是其他人所说的可重复的例子。我发布的答案是基于我对您想要什么的最佳猜测。如果您希望我改进答案,我需要更好地了解您想要什么。所以发布想要的答案。在你这样做之前,我认为其他人不会试图提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
相关资源
最近更新 更多