我正在尝试计算这个时间序列的每日模式 . 在下面的示例数据中,我希望每天看到 windDir.c
列的模式 .
鉴于没有"colMode"参数,不知道如何使用 apply.daily()
包装器 . 所以,我尝试在 period.apply()
中使用自定义函数,但无济于事 . 我尝试的代码以及 dput
如下 .
ep <- endpoints(wind.d,'days')
modefunc <- function(x) {
tabresult <- tabulate(x)
themode <- which(tabresult == max(tabresult))
if (sum(tabresult == max(tabresult))>1)
themode <- NA
return(themode)
}
period.apply(wind.d$windDir.c, INDEX=ep, FUN=function(x) mode(x))
可重复的数据:
wind.d <- structure(list(date = structure(c(1280635200, 1280635200, 1280635200,
1280635200, 1280635200, 1280635200, 1280635200, 1280721600, 1280721600,
1280721600, 1280721600, 1280721600, 1280721600, 1280721600, 1280808000,
1280808000, 1280808000, 1280808000, 1280808000, 1280808000), class = c("POSIXct",
"POSIXt"), tzone = ""), windDir.c = structure(c(4L, 3L, 3L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 6L, 5L, 5L, 4L, 5L, 5L
), .Label = c("15", "45", "75", "105", "135", "165", "195", "225",
"255", "285", "315", "345"), class = "factor")), .Names = c("date",
"windDir.c"), class = "data.frame", row.names = c(NA, -20L))
4 回答
我们可以使用
dplyr
轻松完成此操作:或基地R:
请注意,您尝试的代码和您提供的
dput
的输出不一致 .dput
输出不是xts对象,并且您提供的代码仅适用于xts对象(endpoints
在您提供的data.frame上失败) .假设
wind.d
确实是一个xts对象,你可以使用xts轻松完成:我们可以加载包
modeest
来使用函数mfv
(最常值)输出:
如果有多种模式,我们需要指定我们想要检索的元素 . 否则会返回错误 . 例如,第一个元素:
sqldf
对于那些对
sqldf
感兴趣的人,使用this approach: