You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中按月份分组计算指定列的相关性问题

问题描述

现有如下R数据框:

structure(list(Period = structure(c(2021.33333333333, 2021.41666666667, 2021.5, 2021.58333333333, 2021.66666666667, 2021.75, 2021.83333333333, 2021.91666666667, 2022, 2021.33333333333, 2021.41666666667, 2021.5, 2021.58333333333, 2021.66666666667, 2021.75, 2021.83333333333, 2021.91666666667, 2022, 2021.33333333333, 2021.41666666667), class = "yearmon"), `Bransch (SNI 2007)` = c("Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Livsmedelsindustri (SNI 10-12)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Textilindustri (SNI 13-15)", "Trävaruindustri (SNI 16)", "Trävaruindustri (SNI 16)"), outcome = c(19, 19, 38, 19, 14, 39, 40, 29, 48, 32, 39, 44, 7, 0, 2, 22, 1, -26, 38, 37), expectations = c(41, 39, 33, 28, 21, 38, 15, 27, 14, 35, 36, 36, 53, 41, 24, 36, 11, 54, 32, 33), predict = c(-4, -4, -6, -9, -10, 9, -18, -7, -28, 9, 8, -1, 19, -10, 17, -3, -5, 2, 2, -2), corr = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 20L), class = c("tbl_df", "tbl", "data.frame"))

需求是按Period(yearmon类型)分组,分别计算每组内:

  • outcome与predict的相关性
  • expectations与predict的相关性

此前尝试的代码:

ifelse(data$Period == 'maj 2021', cor(data$outcome, data$predict), NA)

该代码错误地计算了全样本的相关性并赋值给对应月份的行,而非仅该月份内观测的相关性。

解决方案

方法1:使用dplyr包(推荐)

通过group_by()按Period分组,再用mutate()添加分组内的相关系数列:

library(dplyr)

# 加载数据框(假设数据框名为df)
df <- structure(...) # 替换为你的数据框结构

df_result <- df %>%
  group_by(Period) %>%
  mutate(
    corr_outcome_predict = cor(outcome, predict, use = "complete.obs"),
    corr_expectations_predict = cor(expectations, predict, use = "complete.obs")
  ) %>%
  ungroup()
  • use = "complete.obs"用于处理分组内可能存在的NA值,确保计算有效。
  • 运行后,数据框会新增两列,分别对应每组内的两个相关系数。

方法2:使用Base R

用ave()函数实现分组计算,无需额外包:

# 加载数据框
df <- structure(...)

# 计算分组内outcome与predict的相关性
df$corr_outcome_predict <- ave(df$outcome, df$Period, 
                               FUN = function(x) cor(x, df$predict[df$Period == unique(df$Period)], use = "complete.obs"))

# 计算分组内expectations与predict的相关性
df$corr_expectations_predict <- ave(df$expectations, df$Period, 
                                    FUN = function(x) cor(x, df$predict[df$Period == unique(df$Period)], use = "complete.obs"))
  • ave()会按Period分组,对每组的目标变量应用自定义函数计算相关系数。
  • 注意需要在函数内匹配对应分组的predict值。

内容的提问来源于stack exchange,提问作者TerribleStudent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:16:02