【问题标题】:R: create new data.frame with time series from another data.frameR:使用来自另一个 data.frame 的时间序列创建新的 data.frame
【发布时间】:2020-09-25 17:43:49
【问题描述】:

我有一个带有结构的data.frame:

        > str(prv) 
'data.frame':   13184 obs. of  7 variables:  
    $ date                   : Factor w/ 103 levels "2020-01-01",..: 1 1 1 1 1 1 1 1 1 1 ...  
    $ code                   : int  13 13 13 13 13 17 17 17 21 21 ... 
    $ region                 : Factor w/ 21 levels "loc1","loc2",..: 1 1 1 1 1 2 2 2 12 12 ...  
    $ codprv                 : int  69 66 68 67 979 77 76 980 21 981 ...  
    $ denprv                 : Factor w/ 108 levels "city1","city2",..: 25 44 70 93 42 55 75 42 16 42 ...  
    $ shortprv               : Factor w/ 107 levels "","C1","C2","C3",..: 24 7 65 92 1 58 74 1 20 1 ...  
    $ sum                    : int  0 0 0 0 0 0 0 0 0 0 ...  

data.frame 类似于:

date       code region codprv denprv shortprv sum
2020-01-01 13   loc1   69     city1  C1       0
2020-01-01 13   loc1   66     city2  C2       0
2020-01-01 14   loc2   70     city3  C3       0
...
2020-01-02 13   loc1   68     city1  C3       0
2020-01-02 13   loc1   66     city2  C2       5
2020-01-02 14   loc2   70     city3  C3       1
...
2020-01-03 13   loc1   68     city1  C3       15
2020-01-03 13   loc1   66     city2  C2       7
2020-01-03 14   loc2   70     city3  C3       5
...

等等……

我需要得到:

date       city1 city2 city3 ... cityN
2020-01-01 0     0     0     ... n1
2020-01-02 0     5     1     ... n2
2020-01-03 15    7     5     ... n3

我最近学习了 R,我只用它来进行统计分析,而不是时间序列分析。

手动操作并不难,但我想知道一种正确的转换方式(并学习如何独立(重新)使用它)。

对不起我的语言。

感谢您的关注。

【问题讨论】:

  • 欢迎来到 SO!请提供一个可复现的示例,您已经差不多掌握了,下次请使用dput(head(your_data)) 以可读格式提供您的数据。

标签: r dataframe time time-series


【解决方案1】:

你需要来自tidyr的函数pivot_wider

df <- data.frame(date = rep(seq(as.Date("2020/1/1"), by = "day", length.out = 4), each = 3),
                 denprv = rep(c("city1", "city2", "city3"), 4),
                 sum = 1:12)
library(tidyr)

pivot_wider(df, names_from = denprv, values_from = sum)
# A tibble: 4 x 4
  date       city1 city2 city3
  <date>     <int> <int> <int>
1 2020-01-01     1     2     3
2 2020-01-02     4     5     6
3 2020-01-03     7     8     9
4 2020-01-04    10    11    12

您的数据采用长格式,而您需要宽格式。查看有关tidy data 的信息。

【讨论】:

    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多