【发布时间】:2019-04-11 18:07:07
【问题描述】:
我是 R 和 Stack Overflow 的新手,希望您能帮助我解决我的问题。我写了以下代码:
my = matrix(c(1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,
0,1,2,3,5,6,7,10,11,14,
0,1,2,3,4,6,10),ncol = 2, nrow = 17)
colnames(my) = c("ID", "AGE")
my = as.data.frame(my)
my$new = my$ID
system.time(for (i in 1:length(my$ID)) {
ifelse(my$ID[i]==my$ID[i-1],
ifelse(my$AGE[i]-my$AGE[i-1]==1, my$new[i]<-my$new[i-1],my$new[i]<-my$new[i-1]+0.1),
my$new[i]<-my$ID[i])
})
它查看 ID 和 AGE,如果 AGE 不等于之前的 AGE + 1,那么它会将 0.1 添加到 ID 并保留在“新”列中。这是输出:
ID AGE new
1 1 0 1.0
2 1 1 1.0
3 1 2 1.0
4 1 3 1.0
5 1 5 1.1
6 1 6 1.1
7 1 7 1.1
8 1 10 1.2
9 1 11 1.2
10 1 14 1.3
11 2 0 2.0
12 2 1 2.0
13 2 2 2.0
14 2 3 2.0
15 2 4 2.0
16 2 6 2.1
17 2 10 2.2
问题在于,对于 1000 行的数据集来说,它真的很快,但是当我在我的实际数据集上尝试它时,它有超过 850 万行,感觉它永远不会这样做 - 我试着等待几个小时没有成功。
如果您提出提高速度/效率的方法,我将不胜感激。
【问题讨论】:
-
你能说得更具体点吗?比如你想达到什么条件?
-
@sai saran 抱歉,我不确定我是否理解您的问题,但我想弄清楚为什么上述代码在大型数据集上使用时会花费很长时间,以及如何改进。
标签: r dplyr data.table tidyverse