【问题标题】:Extracting nth day of monthly data in r在r中提取每月数据的第n天
【发布时间】:2015-02-19 15:25:15
【问题描述】:

我在使用循环制作列时遇到问题。

我有一个 xts 数据集,它是逐秒数据。

开始

2014-09-01 00:00:00 104.172
2014-09-01 00:00:01 104.170
2014-09-01 00:00:02 104.170
2014-09-01 00:00:03 104.170
2014-09-01 00:00:04 104.170
2014-09-01 00:00:05 104.170

最终得到

2014-09-30 03:59:43 109.312
2014-09-30 03:59:44 109.312
2014-09-30 03:59:45 109.312
2014-09-30 03:59:46 109.312
2014-09-30 03:59:47 109.312
2014-09-30 03:59:48 109.313

我想从这个数据集中创建第 n 天的列。 所以我做了这样的事情

for(i in 1:30){ask[i] <- ask[.indexmday(ask) == i]}

但它没有用。相反,我收到了警告

number of items to replace is not a multiple of replacement length

当我这样做时

asksep1 <- ask[.indexmday(ask) == 1]

它有效,我可以获得 9 月 1 日的数据。所以我认为我的循环有问题。

我该怎么做?感谢您的帮助!

【问题讨论】:

  • 存储在列表中可能会更好。

标签: r loops xts


【解决方案1】:

您似乎想要split.xts。使用来自akrun's answer的数据:

lst <- split(ask, "days")
sapply(lst, nrow)
# [1] 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400
#[13] 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400
#[25] 86400 86400 86400 86400 86400 14400

【讨论】:

    【解决方案2】:

    您可以创建一个list 并将每天的子集存储在一个列表中。当每个 day 的行数不同时,它可能很有用。

    days <- unique(.indexmday(ask))
    lst <- vector('list', length(days))
    for(i in seq_along(days))lst[[i]] <- ask[.indexmday(ask)==days[i]]
    
    sapply(lst, nrow)
    # [1] 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400
    #[13] 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400 86400
    #[25] 86400 86400 86400 86400 86400 14400
    

    数据

    val <- rnorm(840000*3, 110)
    indx <- seq(as.POSIXct('2014-09-01 00:00:00', format='%Y-%m-%d %H:%M:%S'),
        length.out=840000*3, by='sec')
    library(xts)
    ask <- xts(val, order.by=indx)
    

    【讨论】:

    • 谢谢,成功了!由于我没有足够的时间来解决,您的回答对我帮助很大!
    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多