【问题标题】:Finding the maximum of an xts column in a specified date range查找指定日期范围内 xts 列的最大值
【发布时间】:2017-11-06 06:19:29
【问题描述】:

我想在我可以指定的两个日期范围之间找到“高”列的最大值。比如2017-09-012017-09-04之间的最大值是1.29444

这是我的数据

              Open    High     Low   Close
2017-09-01 1.29360 1.29951 1.29052 1.29495
2017-09-03 1.29600 1.29660 1.29444 1.29535
2017-09-04 1.29536 1.29643 1.29124 1.29300
2017-09-05 1.29306 1.30440 1.29088 1.30331
2017-09-06 1.30331 1.30820 1.30181 1.30471
2017-09-07 1.30472 1.31381 1.30325 1.31319
2017-09-08 1.31319 1.32239 1.31233 1.31945
2017-09-10 1.31816 1.31978 1.31736 1.31769
2017-09-11 1.31769 1.32223 1.31593 1.31764
2017-09-12 1.31766 1.33145 1.31703 1.33097
2017-09-13 1.33096 1.33286 1.31836 1.32040
2017-09-14 1.32039 1.34055 1.31501 1.33955
2017-09-15 1.33955 1.36159 1.33922 1.35871
2017-09-17 1.35579 1.36029 1.35579 1.35921
2017-09-18 1.35921 1.36181 1.34646 1.35176
2017-09-19 1.35176 1.35515 1.34683 1.35178
2017-09-20 1.35178 1.36573 1.34517 1.34914
2017-09-21 1.34914 1.35861 1.34706 1.35761
2017-09-22 1.35760 1.35955 1.34496 1.34935
2017-09-24 1.34872 1.35339 1.34832 1.35261
2017-09-25 1.35262 1.35706 1.34308 1.34816
2017-09-26 1.34816 1.35139 1.34094 1.34385
2017-09-27 1.34386 1.34389 1.33634 1.33753
2017-09-28 1.33754 1.34551 1.33427 1.34159
2017-09-29 1.34160 1.34258 1.33497 1.33963

【问题讨论】:

    标签: r max xts


    【解决方案1】:

    您可以使用“YYYY-MM-DD/YYYY-MM-DD”格式的字符串日期轻松地在 xts 中对数据进行子集化。所以高列的最大值是这样的:

    max(df.xts$High["2017-09-01/2017-09-04"])
    

    如果您的数据位于名为 df.xts 的数据框中。如果数据集中有 NA 值,您还可以将 na.rm=T 参数添加到 max 函数,这将排除那些计算最大值而不是返回 NA 的值。

    【讨论】:

    • 我的日期已编码,因此不能只添加日期,DateSelect<-c("2017-09-17")S<-as.character(index(MinDate))
    • @User314159 xts 对象的行名中的日期必须是字符值。 [.xts 函数将解析作为第一个对象传递的字符值。
    • @42-: xts 对象没有行名。 dimnames 列表的第一个元素始终是 NULL。 xts 对象一个具有“索引”属性的矩阵(在通常打印行名的地方打印)。 “索引”属性必须是有序向量(如动物园),但也是基于时间的。该索引在内部实现为从 UNIX 纪元开始的秒数。
    • 感谢指正。我对动物园对象也可能是错误的。我去看看。
    【解决方案2】:

    您的日期列是否存储为行号? 也许想以我们有一个日期列的方式加载数据。这样就可以了。

    #Ensure Date Column is in Date format: 
    library(lubridate) 
    df$Date <- ymd(df$date) 
    
    # Subset by date
    new.df <- subset(df, Date >= as.POSIXct("2017-09-01") & Date <= as.POSIXct("2017-09-04")) 
    
    # Find max
    max(new.df$High)
    

    【讨论】:

    • 我的数据在 xts 中,所以不确定日期列是否存储为行号。尝试安装包lubridate,下载失败。
    • lubridate 的唯一原因是将日期转换为日期格式,以便我们可以在日期之间进行子集化。如果您不使用 xts 而是使用普通数据框左右,那么这将在上面工作。否则其他解决方案将适用于 xts?
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多