Rで次のようなデータフレームがあります:
Date | Time | value
A | 1 | 3
A | 1 | 6
A | 2 | 4
A | 3 | 3
A | 4 | 2
A | 5 | 7
B | 1 | 6
B | 2 | 5
B | 2 | 3
B | 2 | 4
B | 3 | 2
B | 5 | 3
B | 6 | 4
...
私の目的は、2 列目の数値が連続する行で等しい場合、3 列目の数値の中央値を見つけることです。つまり、値が同時に発生する場合は値の中央値を取得し、その中央値を対応するタイムスロットに置き換えます。
だから私が目指している出力:
A | 1 | median (3,6)
A | 2 | 4
A | 3 | 3
A | 4 | 2
A | 5 | 7
B | 1 | 6
B | 2 | median (3,4,5)
B | 3 | 2
B | 5 | 3
B | 6 | 4
...
データセットが巨大であるため、ループを回避しようと必死です。私が抱えている主な問題は、値を個別に収集することです。これは私がこれまで持っていたものです:
#First find consecutive time slots that are equal:
timeslots_equal<-which(diff(data_RAW$TIME)==0)
coordinates_placesholder <- sort(c(as.vector(timestamp_equal_coordinates), as.vector(timestamp_equal_coordinates)+1))
coordinates_placesholder2 <- coordinates_placesholder[-c(which(diff(coordinates_placesholder)==0), which(diff(coordinates_placesholder)==0) +1)]
#The following matrix are the coordinates in the value vector with equal time slots
matrix_ranges<-t(matrix(coordinates_placesholder2,2))
matrix_ranges
上記の例では、次のようになります。
1 | 2
8 | 10
次に、次のようなものを適用しようとしました
median(data_RAW$Value[matrix_ranges[,1]:matrix_ranges[,2]])
これはうまくいきませんでした。これを行うことについて誰か答えがありますか?
また、上記よりも簡単にこれを行う方法はありますか?