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

使用dplyr为数据框补全cluster 1-10的缺失treatment行

补全数据框的缺失组合行

原始数据

df <- structure(list(cluster = c(2L, 3L, 5L, 5L, 6L, 6L, 7L, 9L, 9L, 
10L, 10L), treatment = c("TreatmentA", "TreatmentA", "TreatmentA", 
"TreatmentB", "TreatmentA", "TreatmentB", "TreatmentA", "TreatmentA", 
"TreatmentB", "TreatmentA", "TreatmentB"), count = c(6, 6, 6, 
6, 6, 6, 6, 2, 6, 1, 2)), row.names = c(NA, 11L), class = "data.frame")

解决方案1:使用tidyverse工具包(推荐)

tidyr::complete() 可以直接生成指定的全量组合,并批量填充缺失值:

library(tidyverse)

# 生成cluster 1-10与两种treatment的完整组合,缺失的count填充为0
completed_df <- df %>%
  complete(cluster = 1:10, treatment = c("TreatmentA", "TreatmentB"),
           fill = list(count = 0))

解决方案2:使用Base R

如果不想加载额外工具包,用基础R也能实现:

# 生成所有cluster和treatment的全量组合
full_combinations <- expand.grid(
  cluster = 1:10,
  treatment = c("TreatmentA", "TreatmentB"),
  stringsAsFactors = FALSE
)

# 合并原始数据,将缺失的count值替换为0
completed_df <- merge(full_combinations, df, by = c("cluster", "treatment"), all.x = TRUE)
completed_df$count[is.na(completed_df$count)] <- 0

# 按cluster排序(可选,与目标数据框顺序对齐)
completed_df <- completed_df[order(completed_df$cluster, completed_df$treatment), ]
row.names(completed_df) <- NULL

结果说明

处理后的数据框会包含cluster 1-10的每个值对应的TreatmentA和TreatmentB行,原始数据中不存在的组合会自动填充count = 0,与目标结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:20:02