R语言:如何按Type和Date分组计算不同ID的revenue相关性?
解决方案
首先需要明确:你的数据中每个type+date分组下,每个ID仅对应1个revenue值,而计算两个变量的相关性至少需要2个及以上的配对观测值,因此按type+date分组无法得到有效相关系数(仅单个数据点时,cor()函数会返回NA)。
如果你的实际需求是按type分组,计算同一类型下不同ID的revenue时间序列相关性(即基于多个共同日期的观测值计算),可以用以下方法实现:
代码实现
library(tidyverse) # 1. 按type分组,将不同ID的revenue按日期对齐为宽格式 type_cor_result <- df %>% group_by(type) %>% pivot_wider(names_from = ID, values_from = revenue) %>% # 2. 对每个type计算ID间的相关矩阵 summarise(cor_matrix = list(cor(select(., -date), use = "pairwise.complete.obs"))) %>% # 3. 将相关矩阵转换为长格式表格 mutate(cor_df = map(cor_matrix, ~ as.data.frame(.x) %>% rownames_to_column("row_ID") %>% pivot_longer(-row_ID, names_to = "col_ID", values_to = "correlation"))) %>% unnest(cor_df) %>% # 转换ID为数值类型(可选) mutate(across(c(row_ID, col_ID), as.numeric)) # 可选:转换为以ID为行/列的宽格式表格 type_cor_wide <- type_cor_result %>% pivot_wider(names_from = col_ID, values_from = correlation, id_cols = c(type, row_ID))
结果说明
- 对于
type=1,ID1和ID2有2个共同日期(2023-02-01、2023-03-01)的观测值,计算得到的相关系数为-1(完全负相关)。 type=2仅包含ID3,无其他ID可计算相关性,因此无对应结果。
如果确实需要按type+date分组,你需要补充数据,确保每个分组下每个ID有至少2个观测值,否则无法得到有意义的相关系数。
内容的提问来源于stack exchange,提问作者annyeong
相关产品推荐
相关产品推荐

