【问题标题】:Transform column index of dataframe to yearmon将数据框的列索引转换为 yearmon
【发布时间】:2020-03-11 21:25:28
【问题描述】:

我有以下数据框

data_frame <- data.frame(sku = c("A","B","C"), forecast1 = c(1,2,3), forecast2 = c(4,5,6), forecast3 = c(7,8,9))

我想将 de 列名转换为格式为 yearmon 的日期序列,并使用以下形状收集它们:

colnames(data_frame)[2:4] <- c("2020_03","2020_04","2020_05")
gather(data_frame,"yearmon","forecast",2:4)

我尝试了以下方法:

months <- list()
date_origin <- as.yearmon("2020-02")
for (i in 1:3){
  months[i] <- as.yearmon(months + i/12)
}
colnames(df_prevision)[c(2:84] <- months
df_prevision_gather <- gather(df_prevision,"month","forecast",2:4)

【问题讨论】:

  • 代替monthslist,可能你需要一个vectormonths &lt;- c(); Also, inside the loop, months` 被称为as.yearmon 是一个空的。列表。可能你需要调用 colnames
  • 也许你需要months &lt;- c(); nm1 &lt;- names(data_frame)[-1];for(i in seq_along(nm1)) months[i] &lt;- as.character(zoo::as.yearmon(nm1[i], "%Y_%m") + i/12) &gt; months [1] "Apr 2020" "Jun 2020" "Aug 2020"
  • 你需要gather(data_frame,"yearmon","forecast",2:4) %&gt;% mutate(yearmon = as.yearmon(yearmon, "%Y_%m")) 吗?

标签: r date dplyr


【解决方案1】:

创建格式为 yyyy-mm 的列名,执行 gather 并使用 as.yearmon 转换名为 yearmon 的列:

nc <- ncol(data_frame)
ym <- seq(as.yearmon("2020-03"), length = nc-1, by = 1/12)
names(data_frame)[-1] <- format(ym, "%Y-%m")

data_frame %>%
  gather("yearmon", "forecast", -1) %>%
  mutate(yearmon = as.yearmon(yearmon))

给予:

  sku  yearmon forecast
1   A Mar 2020        1
2   B Mar 2020        2
3   C Mar 2020        3
4   A Apr 2020        4
5   B Apr 2020        5
6   C Apr 2020        6
7   A May 2020        7
8   B May 2020        8
9   C May 2020        9

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2019-04-14
    • 2013-12-26
    相关资源
    最近更新 更多