【发布时间】:2014-03-31 07:42:44
【问题描述】:
样本数据
动作广告名称
加载
bServed Leanardo Vertical Tie Horizontal
单击 Leanardo Vertical Tie Horizontal
加载
bServed The Label Vineet
加载
加载
加载
加载
bServed Clooney the label
关闭标签克鲁尼
加载
加载
加载
bServed Angad Vertical Clooney Horizontal
关闭 Angad Vertical Clooney Horizontal
我需要通过比较我在 Excel 中实际使用的之前生成的 IF(Advertname3=Advertname2,Adblk2,Adblk2+1) 来对广告名称进行编号
动作广告名称 AdBlk 负载 1 bServed Leanardo Vertical Tie Horizontal 2 点击 Leanardo Vertical Tie Horizontal 2 负载 3 bServed The Label Vineet 4 加载 5 加载 5 加载 5 加载 5 bServed Clooney the label 6 关闭 克鲁尼标签 6 加载 7 加载 7 加载 7 bServed Angad Vertical Clooney Horizontal 8 关闭 Angad Vertical Clooney Horizontal 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吗? -
不,你能帮我了解一下吗,因为我是编程新手。
-
我不知道
rmate -
阅读here 了解如何制作一个可重复的小示例。您可以编辑原始问题以包含数据。
-
可能会加速您的代码的一个更改是删除定义
a的两行并使用例如ID_Sort[i,24] <- ID_Sort[(i-1),24]和ID_Sort[i,24] <- ID_Sort[(i-1),24]+1。另一种可能性可能是创建一个只有两列的数据集,然后通过循环传递该数据集,而不是传递一个包含 24 列的数据集,因为循环只对两列进行操作。
标签: r performance for-loop