我有一個獨特的問題。我已經嘗試了幾個不同的東西,我會在問題本身後詳細介紹。如何快速迭代列,檢查沿途的事情(R)
問題: 對於每個用戶ID,我需要遍歷事件日期並檢查每個日期是否在下一個日期的30天之內。我有260,000條記錄,並且不重要的ID號只有一個條目。數據是這樣的:
id | date1 | date2
1 | 2016-01-01 | 2016-02-12
等
我曾嘗試:
- 的foreach(拆出每個ID的組事件,計算,重組;跑進內存問題) 。
- data.table,但我不知道我是否用盡了這個選項。
簡要dplyr(即:
mutate(time_btwn=abs(as.numeric(difftime(data$date,lag(data$date2,1),"days")))))
和我目前正在運行的直接for循環,通過所有行迭代這是非常緩慢的,我希望我沒有做到這一點的。代碼:
for (i in 2:nrow(data)){ if (data$id[ i ] != data$id[ i - 1 ]){ next } else { data$timebtwn[i] <- abs(as.numeric(difftime(data$date1[i], data$date2[ i - 1 ], "days"))) } }
我已經研究過申請,並lapply,但不能完全制定出功能,插入應用或lapply,將我需要什麼(即在列1中的每個條目,在列2中檢查一行nd返回日期之間的差異,如果兩行具有相同的id)。
是否有比直線循環(或使用foreach的方式)快而且不佔用內存的快捷方式?
你可以'輸入()你的數據的一個例子嗎? – effel
聽起來您需要操作很多色譜柱,因此需要融化很長時間才能在單個色譜柱上進行操作。儘管如此,在這種情況下可能會很長,所以解決方法可能是適當的。 – alistaire
不中斷我提到的for循環。儘管如此,這些數據實際上就是我所說的。 ID,date1,date2。對不起(如果和當它結束時,我會更新這個帖子 – user3933614