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

如何按dataset分组统计治疗类型数量并添加至df2数据框

按Dataset统计治疗类型并合并到汇总数据框的R实现

方法一:Base R 实现

从全量数据df1中按dataset分组统计目标治疗类型的样本数,再与汇总数据框df2合并:

# 统计各dataset下的治疗类型计数
treatment_counts <- as.data.frame.matrix(xtabs(~ dataset + treatment, data = df1))

# 筛选出需要的4种治疗类型列
target_treatments <- c("Treatment1", "Treatment2", "Treatment3", "Treatment1 + Treatment3")
treatment_counts <- treatment_counts[, target_treatments, drop = FALSE]

# 与df2合并,保留df2所有行
df2 <- merge(df2, treatment_counts, by = "dataset", all.x = TRUE)

# 将缺失值(无对应治疗的dataset)替换为0
df2[is.na(df2)] <- 0

方法二:dplyr + tidyr 实现

用tidyverse语法更直观地完成统计与合并:

library(dplyr)
library(tidyr)

# 分组统计目标治疗类型的样本数
treatment_summary <- df1 %>%
  group_by(dataset, treatment) %>%
  summarise(count = n(), .groups = "drop") %>%
  filter(treatment %in% target_treatments) %>%
  pivot_wider(
    names_from = treatment,
    values_from = count,
    values_fill = 0 # 无对应治疗的自动填充0
  )

# 合并到df2
df2 <- df2 %>% left_join(treatment_summary, by = "dataset")

特殊情况处理

如果df1的treatment字段不是直接的目标4种类型(比如是多治疗组合的字符串,如"Treatment1,Treatment3"),需先转换分类:

df1 <- df1 %>%
  mutate(
    treatment_group = case_when(
      treatment == "Treatment1" ~ "Treatment1",
      treatment == "Treatment2" ~ "Treatment2",
      treatment == "Treatment3" ~ "Treatment3",
      grepl("Treatment1", treatment) & grepl("Treatment3", treatment) ~ "Treatment1 + Treatment3",
      TRUE ~ NA_character_ # 其他类型标记为缺失,后续会被过滤
    )
  )

# 之后将上述代码中的`treatment`替换为`treatment_group`即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:45:11