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

R中基于subject字符列填充group列缺失值的实现方法

首先修正你的示例数据的两处小问题:字符类型的subject值需加引号,两个列的向量长度需匹配,修正后的示例数据如下:

df <- data.frame(
  subject = c("a1_1", "a1_1", "a1_1", "a1_1", "a1_2", "a1_2", "b1_1", "b1_1", "b1_1", "b1_1"),
  group = c(1, NA, NA, NA, NA, 1, NA, NA, 2, NA)
)

以下是几种常用的实现方式:

方法1:tidyverse套件实现(可读性最高)

用dplyr分组后配合tidyr的fill函数填充即可:

library(dplyr)
library(tidyr)

df_filled <- df %>%
  group_by(subject) %>%
  # 若确认每个subject的非NA group值一定在首行,.direction参数可省略,默认向下填充
  fill(group, .direction = "downup") %>%
  ungroup()

方法2:base R实现(无需安装额外依赖)

用分组统计函数ave对每个subject提取首个非NA的group值赋值到全组:

df$group <- ave(df$group, df$subject, FUN = function(x) na.omit(x)[1])

方法3:data.table实现(适合大体积数据集,运算速度最快)

library(data.table)
# 转换为data.table格式
setDT(df)
# 按subject分组后赋值
df[, group := na.omit(group)[1], by = subject]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:18:04