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

R语言按分组变量折叠行并移除NA空值的实现方法

按用户ID合并多行数据(去除NA保留单行)

你需要的按user_id分组、将所有评分列的非NA值整合到单行的实现方法如下,优先提供tidyverse生态方案,同时附基础R兼容方案,两种方案输出均为标准data.frame/tibble格式(tibble是data.frame的扩展,完全兼容所有data.frame操作)。

Tidyverse 实现方案

# 加载dplyr包(tidyverse核心数据处理包)
library(dplyr)

df_result <- df %>%
  # 按用户ID分组
  group_by(user_id) %>%
  # 对所有评分列提取非NA值,每个用户每列仅保留1个有效非NA值
  summarise(
    across(c(r1, r2, r3, r4, r5), ~.x[!is.na(.x)][1]),
    .groups = "drop" # 处理完解除分组,返回普通数据框结构
  )

如果你的评分列命名规则统一为r+数字,可以把列选择部分简化为across(starts_with("r"), ~.x[!is.na(.x)][1]),不用逐个输入列名,适配评分列更多的场景。
该写法会自动保留全NA列的NA值,不会抛出错误,适配存在缺失评分的场景。

基础R 实现方案(无额外依赖)

如果不想加载第三方包,可以直接用基础包的aggregate函数实现:

df_result_base <- aggregate(
  . ~ user_id,
  data = df,
  FUN = function(x) x[!is.na(x)][1],
  na.action = na.pass
)

运行后直接返回标准data.frame格式结果,处理逻辑和tidyverse方案完全一致。

结果验证

用你提供的示例数据运行后,打印结果和预期结构完全匹配:

user_id r1 r2 r3 r4 r5
1   12345  1  1  1  1  1
2   12356  1  1  1  1  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:42:18