我正在嘗試應用我編寫的用於過濾數據集的tapply函數。以下是一個示例數據框(df),用於描述我正在嘗試執行的操作。根據tapply函數的結果過濾數據幀
我要保持我的數據幀中的行,其中DF $ Cumulative_Time的值最接近它應該在DF $ ID每個因子水平做到這一點的14值(保持行最接近值14對於每個ID因子)。
ID Date Results TimeDiff Cumulative_Time
A 7/10/2015 71 0 0
A 8/1/2015 45 20 20
A 8/22/2015 0 18 38
A 9/12/2015 79 17 55
A 10/13/2015 44 26 81
A 11/27/2015 98 37 118
B 7/3/2015 75 0 0
B 7/24/2015 63 18 18
B 8/21/2015 98 24 42
B 9/26/2015 70 30 72
C 8/15/2015 77 0 0
C 9/2/2015 69 15 15
C 9/4/2015 49 2 17
C 9/8/2015 88 2 19
C 9/12/2015 41 4 23
C 9/19/2015 35 6 29
C 10/10/2015 33 18 47
C 10/14/2015 31 3 50
D 7/2/2015 83 0 0
D 7/28/2015 82 22 22
D 8/27/2015 100 26 48
D 9/17/2015 19 17 65
D 10/8/2015 30 18 83
D 12/9/2015 96 51 134
D 1/6/2016 30 20 154
D 2/17/2016 32 36 190
D 3/19/2016 42 27 217
我得到儘可能如下:
spec_day = 14 # value I want to compare df$Cumulative_Time to
# applying function to calculate closest value to spec_day
tapply(df$Cumulative_Time, df$ID, function(x) which(abs(x - spec_day) == min(abs(x - spec_day))))
問:我怎麼有這個tapply功能做我的數據幀DF的過濾手段?我以正確的方式處理這個問題,還是有一些簡單的方法來完成這個我沒有看到的?任何幫助將不勝感激 - 謝謝!
如果你想堅持R基本語言,你可以看看'分裂(DF,DF $ ID)'然後用' lapply'使用你的方法來檢索對應於特定ID的索引'result < - lapply(mysplit,FUN = function(df){df [which()...,]})'。最後,將所有過濾的數據與「do.call(」rbind「,result)」結合起來。我會鼓勵調查'data.table'選項 –
謝謝,@EricLecoutre!我記得閱讀關於split(),所以我也會嘗試這種方法! – soitgoes