【问题标题】:How to split a time series data by range of date in R? [duplicate]如何在R中按日期范围拆分时间序列数据? [复制]
【发布时间】:2020-10-13 01:12:57
【问题描述】:

我是 R 的初学者,正在研究时间序列月度数据:

我从我的数据框中选择了以下数据列

df = select(data, Date, Location, Production,  Value)

有 13 个不同的地点、多个生产部门及其价值。日期范围为 2016-01-2020-09。

我想将数据分成两列:covid 之前(2016-01 到 2020-01),covid 之后(2020-02 到 2020-09)。 我如何在 R 中做到这一点?有没有简单的方法?

【问题讨论】:

  • 发布 dput(df) 或 head(df) 的输出会很有帮助,以便人们更好地了解您的数据是什么样的。
  • 我只会分配一个新的 covid 列,并在 covid 之前分配为 FALSE,在 covid 之后分配为 TRUE。这可以由df[df$Date < as.Date("2020-02-01", format="%Y-%m-%d"), 'Covid'] <- FALSE 完成并重复该过程以将大于或等于二月的日期设置为真。
  • 请确保您的dput 是完整的,并通过文字而不是图像来分享。 Label = c("2016-01", ......), 部分不完整,因此我们无法将其复制到我们的 R 系统中。

标签: r dataframe split dplyr


【解决方案1】:

我认为您正在寻找这样的东西。这是tidy 解决方案。有几种类似的方法可以做到这一点,但我认为这很简单。

library(dplyr)
df %>% 
  mutate(PreCovid = ifelse(Date < as.Date("2020-02-01"), Value, NA), 
         PostCovid = ifelse(Date >= as.Date("2020-02-01"), Value, NA))

【讨论】:

  • 非常感谢,我收到以下错误消息:mutate() 输入问题PreCovid。 x “PreCovid 是ifelse(...)。“mutate() 输入PostCovid。 x ">=" 的不兼容方法 ("Ops.factor", ">=.Date") ℹ 输入 PostCovid 是 ifelse(...)。不兼容的方法 ("Ops.factor", ">=.Date") 为 " >="
【解决方案2】:

我们可以先转换为日期类,然后指定我们要划分数据的范围。

library(dplyr)

df <- df %>%
       mutate(Date = as.Date(paste0(Date, '-01')), 
              period = case_when(between(Date, as.Date('2016-01-01'), 
                                    as.Date('2020-01-01')) ~ 'Before covid', 
                                  between(Date, as.Date('2020-01-02'), 
                                    as.Date('2020-11-01')) ~ 'After covid'))

【讨论】:

  • 非常感谢,错误:mutate() 输入问题period。 x 不能将类型 'closure' 强制转换为类型为 'double' 的向量 ℹ 输入 period 是 case_when(...)。
  • 这里是 dput(head(df)) 的前几行。 :结构(列表(日期=结构(c(1L,1L,1L,1L,1L,1L),.Label = c(“2016-01-01”,....),class=“因素”),位置 = 结构(c(4L, ....),
  • @Albert 请将 dput 添加到您的问题中。它在 cmets 中被切断了。
  • @Albert 你能检查更新的答案吗?您在 dput 中使用了 Date 列作为因子,这与您之前在图片中显示的不同。
  • 太好了,工作!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
相关资源
最近更新 更多