【发布时间】:2015-02-17 14:35:39
【问题描述】:
我有一个大型数据框(600 万行),其中一行用于进入时间,下一行用于同一单元 (id) 的退出时间。我需要把它们放在一起。
原始数据如下所示(请记住,某些“id”可能会像 id=1 一样进入和退出两次):
df <- read.table(header=T, text='id time
1 "15/12/2014 06:30"
1 "15/12/2014 06:31"
1 "15/12/2014 06:34"
1 "15/12/2014 06:35"
2 "15/12/2014 06:36"
2 "15/12/2014 06:37"
3 "15/12/2014 06:38"
3 "15/12/2014 06:39"')
我需要的输出:
id entry exit
1 15/12/2014 06:30 15/12/2014 06:31
2 15/12/2014 06:34 15/12/2014 06:35
3 15/12/2014 06:36 15/12/2014 06:37
4 15/12/2014 06:38 15/12/2014 06:39
现在我尝试了一个 for 循环,它从第 1 行中选择 id 和进入时间,从第 2 行中选择退出时间,并将它们放在一起:
for (i in 1:nrow(df)){
outputdf[i,1] <- df[i+i-1,1]
outputdf[i,2] <- df[i+i-1,2]
outputdf[i,3] <- df[i+i-1+1,2]
}
问题在于它的效率非常低(适用于 10k 个子集,但不适用于我的 600 万个数据框)。我需要至少花不到一分钟的时间。我在df 中有 600 万行。你知道比这个循环更快的匹配行吗?
【问题讨论】:
-
代码优化问题应该在 CodeReview 上提问,而不是 StackOverflow codereview.stackexchange.com
标签: r for-loop optimization bigdata