【问题标题】:Create vector of appended dates in R在 R 中创建附加日期的向量
【发布时间】:2014-11-15 02:44:19
【问题描述】:

我有一个包含 3 个字段的数据框 (set1) - date(日期)、price(数字)和 event(逻辑) . 我想创建一个向量,当 event 为 TRUE 时返回 date

我已经能够为 price 做到这一点:返回一个包含 346 个价格的向量

n <- c()
for(i in 1:length(set1$price)){
    if(set1$event[i] == TRUE) {
      n <- append(n,set1$price[i])
  }
}

但是,当我尝试对 date 执行相同操作时,仅返回 event 为 TRUE 的第一个 date:2001-10- 29

n <- c()
for(i in 1:length(set1$date)){
    if(set1$event[i] == TRUE) {
      n <- append(n,set1$date[i])
  }
}

我尝试将空向量分配为日期字段,但结果仍然相同:

n <- c()
n <- as.Date(as.character(n), format = "%Y%m%d")

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以在逻辑向量event 上使用[ 子集。例如,这是一些虚构的数据

    date <- seq(Sys.Date()-5, Sys.Date(), 1)
    event <- c(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE)
    (set1 <- data.frame(date, event))
    #         date event
    # 1 2014-11-09 FALSE
    # 2 2014-11-10  TRUE
    # 3 2014-11-11  TRUE
    # 4 2014-11-12 FALSE
    # 5 2014-11-13 FALSE
    # 6 2014-11-14  TRUE
    

    然后您可以通过event 向量对date 向量进行子集化,并且将返回事件为 TRUE 的所有日期。

    with(set1, date[event])
    # [1] "2014-11-10" "2014-11-11" "2014-11-14"
    

    您可以对数据中的定价列执行相同操作。

    【讨论】:

    • R 被精美地矢量化了 :) 很多时候,循环根本不需要。
    • 你是对的。我把它复杂化了。通过子集,我可以拥有一个包含日期和价格的数据框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多