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

R中按Action分组快速计算Difficulty与多变量的相关性

问题需求

基于数据框df,筛选出Action包含"Field"的行,按Action分组后,计算每组中Difficulty与strings、characters、POS、NEG、NEU各变量的相关性,寻求高效的单命令实现方式。

原代码错误原因

你之前的代码报错主要有两个原因:

  1. summarise_all(funs(cor))会对每个变量单独调用cor(),但cor()需要至少两个变量才能计算相关性,没有指定和Difficulty关联,逻辑不成立;
  2. 部分分组(如"Field or Catch"、"Field or Ball"、"Field and run")只有1条数据,单样本无法计算相关系数,会触发错误。
解决方案

方法1:宽格式输出(保留原变量列)

使用dplyr的across()函数遍历目标变量,逐个计算与Difficulty的相关性,同时处理单样本分组的情况:

library(dplyr)
library(stringr)

df %>%
  filter(str_detect(Action, "Field")) %>%
  na.omit() %>%
  group_by(Action) %>%
  summarise(
    across(
      .cols = c(strings, characters, POS, NEG, NEU),
      .fns = ~ if(n() >= 2) cor(Difficulty, .x) else NA_real_,
      .names = "cor_{.col}"
    )
  )
  • across()批量处理指定变量,.names参数自动生成带前缀的列名,更清晰;
  • 通过if(n() >= 2)判断分组样本数,单样本时返回NA避免报错。

方法2:长格式输出(更易查看分组-变量的对应关系)

先将数据转成长格式,再分组计算相关性,结果结构更直观:

library(dplyr)
library(stringr)
library(tidyr)

df %>%
  filter(str_detect(Action, "Field")) %>%
  na.omit() %>%
  pivot_longer(
    cols = c(strings, characters, POS, NEG, NEU),
    names_to = "Variable",
    values_to = "Value"
  ) %>%
  group_by(Action, Variable) %>%
  summarise(
    Correlation = if(n() >= 2) cor(Difficulty, Value) else NA_real_,
    .groups = "drop"
  )
  • pivot_longer()将多列变量转换为"变量名-值"的键值对形式;
  • .groups = "drop"取消分组,最终结果为扁平化的数据框,便于后续分析或可视化。

结果说明

  • 只有Action = "Field"的分组有2条数据,能计算出有效相关系数;
  • 其余分组因仅1条数据,相关性结果返回NA(符合统计逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:54:24