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

如何按Subject和Event分组计算ImmerseNeg与ReframeNeg的Rating差值?

解决方法:按Subject和Event计算Rating差值

下面提供两种常用的实现方式,均能得到你需要的结果:

方法1:使用tidyverse工具包(推荐,代码更直观)

先筛选出仅包含ReframeNeg和ImmerseNeg的行,再通过宽格式转换或分组计算得到差值:

library(dplyr)
library(tidyr) # 用于pivot_wider

# 方式1:宽格式转换后计算
solution <- example %>%
  # 过滤掉不需要的ImmerseNeu类型
  filter(TrialType %in% c("ReframeNeg", "ImmerseNeg")) %>%
  # 将TrialType的不同值转为列,对应Rating值
  pivot_wider(names_from = TrialType, values_from = Rating) %>%
  # 计算差值
  mutate(NegAffDiff = ImmerseNeg - ReframeNeg) %>%
  # 保留需要的列
  select(Subject, Event, NegAffDiff)

# 方式2:分组直接计算
solution <- example %>%
  filter(TrialType %in% c("ReframeNeg", "ImmerseNeg")) %>%
  group_by(Subject, Event) %>%
  summarize(
    NegAffDiff = Rating[TrialType == "ImmerseNeg"] - Rating[TrialType == "ReframeNeg"],
    .groups = "drop" # 取消分组
  )

方法2:使用Base R(无需额外安装包)

通过筛选、分组聚合的方式实现:

# 先筛选出目标TrialType的行
filtered_data <- example[example$TrialType %in% c("ReframeNeg", "ImmerseNeg"), ]

# 按Subject和Event分组计算差值
solution <- do.call(rbind, lapply(split(filtered_data, list(filtered_data$Subject, filtered_data$Event)), function(group) {
  data.frame(
    Subject = unique(group$Subject),
    Event = unique(group$Event),
    NegAffDiff = group$Rating[group$TrialType == "ImmerseNeg"] - group$Rating[group$TrialType == "ReframeNeg"]
  )
}))

# 清除自动生成的行名
rownames(solution) <- NULL

运行任意一种方法后,solution数据框都会和你期望的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:47:21