【问题标题】:Subsetting my data frame by Date按日期对我的数据框进行子集
【发布时间】:2015-04-09 00:30:32
【问题描述】:

我在某处看到了代码,但在我一直在搜索的 30 分钟内没有找到它。

这是我现在的代码

library('quantmod')
today <- Sys.Date()
getSymbols("SBUX")
retSBUX <- dailyReturn(SBUX)
starbucks <- data.frame(SBUX)
starbucks[,7] <- as.Date(row.names(starbucks))
row.names(starbucks) <- NULL
starbucks <- subset(starbucks, starbucks[,7] >= "2015-04-06" && starbucks[,7] <= today)

当我运行此代码时,我得到一个数据框,其中包含 0 变量和数据框中的列名。

【问题讨论】:

标签: r subset


【解决方案1】:

您应该使用矢量化逻辑运算符 &amp; 而不是短路运算符 (&amp;&amp;):

starbucks <- subset(starbucks, starbucks[,7] >= "2015-04-06" & starbucks[,7] <= today)

R - boolean operators && and ||

【讨论】:

  • 我觉得有趣的是,您可以将 Date 对象与字符串进行比较,并且效果很好。从来没有想过这会奏效。
  • @thelatemail 1 &lt; "2" 呢?
  • @bergant - 我知道这行得通,但它似乎有风险,就像在 1 &lt; "02" 中一样,使用 1 &lt; as.numeric("02") 会更安全。我注意到如果日期不是明确的标准格式,Date-to-string 比较会失败,所以我想这没关系。尽管这仍然是一种冒险的做法,但在执行 Sys.time() &lt; "1900-01-01 00:00" 时会返回 TRUE,因此该模式在处理所有日期/日期时间对象时并不成立。
  • 所以基本上,我可以删除 &amp; starbucks[,7] &lt;= today 部分,它会工作的。
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 2013-10-25
  • 1970-01-01
  • 2020-10-17
  • 2019-12-28
  • 1970-01-01
  • 2021-06-14
  • 2018-09-01
相关资源
最近更新 更多