我希望得到一些指导。
我有一些数据显示温度超过10秒。
示例数据框如下(我的数据框有超过3000行!):
x <- as.data.frame(seq(0,500, by=10))
set.seed(1234)
y <- as.data.frame(rnorm(51,38,2))
df <- data.frame(x,y)
X是时间,Y是温度。
现在我对循环有垃圾,但我想从每50秒的中断中提取中值温度,即每5个元素串联的中位数。希望这是有道理的。
整个下午都试图玩循环,现在失去了所有希望......这在R中是否可行?
答案 0 :(得分:0)
来自包TTR的runMedian
听起来就像你要找的那样
runMedian(df$y, 5)
ZOO包中还有rollmedian
和更一般的rollapply
。
答案 1 :(得分:0)
您是否在询问如何计算滚动中位数?
库zoo
具有滚动中值函数
library(zoo)
set.seed(1234)
y <- as.data.frame(rnorm(51,38,2))
rollmedian(y,5)
希望这有帮助。
答案 2 :(得分:0)
比使用包装更粗糙。 拆分5,并将中位数应用于列表。
x <- as.data.frame(seq(0,500, by=10))
set.seed(1234)
y <- as.data.frame(rnorm(51,38,2))
df <- data.frame(x,y)
colnames(df) = c("time", "temp")
a = split(df, rep(1:11 , each = 5))
res = sapply(a, function(x) {median(x$temp)})