Я новичок в 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 и сохраняет это в столбце «new». Вот вывод:
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 строк, но когда я пробую это на моем фактическом наборе данных, который имеет более 8,5 м строк, мне кажется, что он никогда этого не сделает - я пытался ждать несколько часов безуспешно.
Буду очень признателен, если вы предложите способ улучшить скорость / эффективность.