我想将超过61个单位的运行中位数应用于我的整个数据框。
root
我使用了这段代码:
df= 13.03.2017 11:42 12:42:00 877401 922800 -5.045 147 14 NA
13.03.2017 11:42 12:42:01 877440 922839 -5.045 148 14 504
...
13.03.2017 14:40 15:40:12 864742 868109 -0.389 149 25 515
我收到错误:
df_med<-apply(df, 2, runmed, k=61)
我已经尝试排除第一行,但出现了同样的错误。
答案 0 :(得分:1)
将这些数据视为多变量时间序列似乎是有意义的。我偏好图书馆zoo
,但还有其他选择
有了很好的示例数据显然没有出现我嘲笑了我自己的一些。可能适用,可能不适用。
library(zoo)
# Put together a data frame with a time vector in the first column
df <- data.frame(x=as.POSIXct(1:10*60, origin="1970-01-01"),
a=c(NA, 1, 6, 4, 2, 9, 4, 3, 1, 2),
b=c(2, 4, 1, 5, 2, 8, 4, 6, 9, NA))
# Convert the data frame into a multivariate time series
df.zoo <- read.zoo(df)
summary(df.zoo)
# Apply a rolling median on the time series
rollapply(df.zoo, 3, median, na.rm=TRUE, fill=NA)
如果存在NA
值,则rollapply
更容易使用na.rm=TRUE
并将median
作为参数传递给na.omit
函数,而不是处理{fill=NA
1}}或类似的方法。 {{1}}确保系列的长度与之前相同。