IRanges
これがパッケージを使用したソリューションです。
idx
は、データ形式が 、、、、... であると想定してTime
います。そのため、インデックスが作成されます。data
Time
data
1,3,5,...ncol(df)-1
ir1
は、平均が必要な間隔です。幅は 400 です。各 Time 列 (ここでは列 1 と 3) の 0 から max(Time) までです。
ir2
間隔幅 = 1 の対応する時間列です。
次に、とのオーバーラップを取得しますir1
。ir2
これは、基本的に、ir2 のどの間隔が ir1 とオーバーラップするか (必要な場合) を示し、そこから平均を計算して を出力しdata.frame
ます。
idx <- seq(1, ncol(df), by=2)
o <- lapply(idx, function(i) {
ir1 <- IRanges(start=seq(0, max(df[[i]]), by=401), width=401)
ir2 <- IRanges(start=df[[i]], width=1)
t <- findOverlaps(ir1, ir2)
d <- data.frame(mean=tapply(df[[i+1]], queryHits(t), mean))
cbind(as.data.frame(ir1), d)
})
> o
# [[1]]
# start end width mean
# 1 0 400 401 0.6750000
# 2 401 801 401 0.8050000
# 3 802 1202 401 0.8750000
# 4 1203 1603 401 0.2285333
# [[2]]
# start end width mean
# 1 0 400 401 0.73508
# 2 401 801 401 0.13408
# 3 802 1202 401 0.26408
# 4 1203 1603 401 1.06408
# 5 1604 2004 401 3.06408
列ごとTime
に、間隔とその間隔の平均のリストが表示されます。