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

按episode分组将同组多行合并为单行,对treatment等变量执行聚合运算

实现方案

方案说明

输入数据中的treatment列存储的是字符串格式的"NA",需要先转换为数值型的缺失值,再按照country、episode、time1、time2、status分组(同组内这些字段取值完全一致),对treatment执行带缺失值忽略的求和即可匹配预期输出。

dplyr实现代码(最常用的分组处理方案)

# 加载依赖包
library(dplyr)

Df2 <- Df %>%
  # 转换treatment为数值型,字符串"NA"会自动转为标准缺失值
  mutate(treatment = as.numeric(as.character(treatment))) %>%
  # 按同组取值一致的字段分组
  group_by(country, episode, time1, time2, status) %>%
  # 求和时忽略缺失值,全为缺失时求和结果为0
  summarise(treatment = sum(treatment, na.rm = TRUE), .groups = "drop") %>%
  # 调整列顺序和示例输出保持一致
  select(country, time1, time2, episode, status, treatment) %>%
  as.data.frame()

基础R实现代码(无需加载额外包)

# 处理treatment列的字符串NA,转为数值后将缺失值替换为0
Df$treatment <- as.numeric(as.character(Df$treatment))
Df$treatment[is.na(Df$treatment)] <- 0

# 按分组聚合求和
Df2 <- aggregate(treatment ~ country + episode + time1 + time2 + status, data = Df, FUN = sum)

# 调整列顺序匹配输出要求
Df2 <- Df2[, c("country", "time1", "time2", "episode", "status", "treatment")]

输出验证

两种方案得到的结果均和预期完全一致:

country time1 time2 episode status treatment
1       A  1950  1951       1      0        10
2       A  1951  1953       2      1        20
3       A  1953  1954       3      0         5
4       A  1954  1955       4      1         0
5       B  1950  1951       1      1         0
6       B  1951  1952       2      0        30
7       B  1952  1954       3      1       110

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:15:07