【问题标题】:Reshape table: year vs monthly data重塑表格:年与月度数据
【发布时间】:2018-10-24 16:04:58
【问题描述】:

制作数据框

a <- c(1981,11.663480,12.580290,11.728730,10.403690,8.065430,7.498169,9.858521,   
   10.503750,12.837550,13.322750,12.120450,13.466980)
b <- c(1982,13.250670,13.158510,13.805300,13.768520,12.035980,9.121552,11.130580,   
   12.353730,12.448520,12.690670,12.369690,13.099700)
Data <- as.data.frame(t(a))
Data[2,]<- t(b)

第一列是年份,其余的是每个月。 我想将数据框重塑为 2 列,第一列用于日期,第二列用于值。很明显,真正的表是40年的。

类似的东西

    dates    value
[1] 1981/01  11.663
[2] 1981/02  12.58

我用这个来重塑:

library(reshape)
md <- melt(Data, id=(c("V1")))

现在我可以重新排序,在数据框“md”中,对应年份从1981年开始的列。我尝试使用cast提取,但无法做到。

【问题讨论】:

  • md 的预期输出是什么?它是一个 3 列数据集。为什么又需要cast,因为它是长格式
  • 对应年份的每个月的值,开始:01/1981 - 11.63

标签: r time-series reshape


【解决方案1】:

我们可以通过paste使用“V1”列的行序列来做到这一点,执行arrange

library(dplyr)
md %>% 
  group_by(V1) %>% 
  mutate(dates = sprintf('%d/%02d', V1, row_number()), value) %>% 
  ungroup %>% 
  select(-V1, -variable) %>%
  arrange(dates)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多