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

为分组DataFrame补全行:使每个Sequ组包含X的全部A/B/C水平

为分组后的DataFrame补充缺失行与变量水平

需求:让每个Sequ分组都包含3行数据,补全X变量缺失的A、B、C水平。

原始数据:

df <- data.frame(
  Sequ = c(1, 1, 2, 2, 3, 3, 3),
  X = c("A", "B", "B", "C", "A", "C", "B")
)

方案1:用tidyr::complete()快速生成全组合

适合需要按X固定顺序(A→B→C)补全的场景:

library(tidyverse)

df_complete <- df %>%
  complete(Sequ, X = c("A", "B", "C")) %>%
  arrange(Sequ, X)

print(df_complete)

输出:

Sequ X
1    1 A
2    1 B
3    1 C
4    2 A
5    2 B
6    2 C
7    3 A
8    3 B
9    3 C

方案2:保留原有X顺序再补全缺失项

完全匹配你给出的期望输出顺序:

library(dplyr)

df_complete_custom <- df %>%
  group_by(Sequ) %>%
  summarise(X = c(X, setdiff(c("A", "B", "C"), X)), .groups = "drop")

print(df_complete_custom)

输出:

# A tibble: 9 × 2
    Sequ X    
   <dbl> <chr>
 1     1 A    
 2     1 B    
 3     1 C    
 4     2 B    
 5     2 C    
 6     2 A    
 7     3 A    
 8     3 C    
 9     3 B

解释:setdiff(c("A", "B", "C"), X)会计算当前分组中缺失的X水平,再和原有X值合并,最终每个分组都包含A、B、C三个水平。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:02:12