下面是使用IRanges
包的解決方案。
idx
假設你的數據格式是Time
,data
,Time
,data
,...等等。所以,它會創建索引1,3,5,...ncol(df)-1
。
ir1
是你想要的意思的時間間隔。它的寬度是400.對於每個時間列(這裏是第1列和第3列),它從0到最大值(時間)。
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
欄,你會得到與間隔列表,並意味着該時間間隔。
你能提供一個你的數據結構的例子嗎?你如何將它存儲在R中?知道這一點,我想我可以幫助一個簡單的解決方案。 – 2013-02-20 21:42:57
我剛剛使用.... data = read.delim(「剪貼板」)...數據來自excel電子表格 – 2013-02-21 03:07:54
好吧,我明白了。我需要一個精確的數據結構。你可以運行dump(head(data,10),「」)'並在這裏粘貼輸出嗎?是否有可能分享一些數據?這會有很大的幫助。如果存在保密問題,也許你可以先用隨機值乘以數字。 – 2013-02-21 03:39:37