【问题标题】:R grouped time series correlations with tidyverseR 分组时间序列相关性与 tidyverse
【发布时间】:2020-05-24 02:44:10
【问题描述】:

我想要分组数据框中的时间序列相关性。这是一个示例数据集:

x <- cbind(expand.grid(type = letters[1:4], time = seq(1:4), kind = letters[5:8]), value = rnorm(64)) %>% arrange(type, time, kind)

生成 64 行变量 typetimekindvalue

我想要按type 分组的每个kind 的值的时间序列相关性。将每个 typetime 组合视为 4 个值的有序向量。我按typetime分组,然后按kind排列,然后删除kind

y <- x %>% group_by(type) %>% arrange(type, time, kind) %>% select(-kind)

然后,我可以按类型和时间对 y 进行分组并嵌套,以便所有值都在数据变量中,仅按 type 重新分组并创建一个新变量,即前导 data

z <- y %>% group_by(type, time) %>% nest(value) %>% group_by(type) %>% mutate(ahead = lead(data))

现在我想运行mutate(R = cor(data, ahead)),但我似乎无法正确获取语法。

我也尝试过mutate(R = cor(data$value, ahead$value))mutate(R = cor(data[1]$value, ahead[1]$value)),但无济于事。

我从cor 得到的错误是:supply both 'x' and 'y' or a matrix-like 'x'

如何将数据和前向变量作为向量引用以使用cor 运行?

最终,我正在寻找一个包含 typetimeR 列的 16 行数据框,其中 R 是单个相关值。

感谢您的关注。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    我们可以使用purrr中的map2_dbldataahead同时传递给cor函数。

    library(dplyr)
    
    z %>%
      mutate(R = purrr::map2_dbl(data, ahead, cor)) %>%
      select(-data, -ahead)
    
    #  type   time     R
    #  <fct> <int>   <dbl>
    # 1 a         1  0.358 
    # 2 a         2 -0.0498
    # 3 a         3 -0.654 
    # 4 a         4  1     
    # 5 b         1 -0.730 
    # 6 b         2  0.200 
    # 7 b         3 -0.928 
    # 8 b         4  1     
    # 9 c         1  0.358 
    #10 c         2  0.485 
    #11 c         3 -0.417 
    #12 c         4  1     
    #13 d         1  0.140 
    #14 d         2 -0.448 
    #15 d         3 -0.511 
    #16 d         4  1     
    

    在base R中,我们可以使用mapply

    z$R <- mapply(cor, z$data, z$ahead)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多