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

在R语言中合并相同标识符的行:DataFrame扁平化需求

解决DataFrame按Number分组合并非NA值的问题

问题场景

现有如下DataFrame:

# 示例数据
df <- tibble(
  Number = c(3, 3, 4),
  Superclass = c(NA, "Superclass: Benzenoids", "Superclass: Painkiller"),
  Class = c("Class: Benzene and substituted derivatives", NA, NA),
  Subclass = c(NA, NA, NA)
)

需要按Number分组,将同一组内Superclass、Class、Subclass的非NA值合并到同一行,期望输出:

#   Number Superclass                    Class                                      Subclass
#   <dbl> <chr>                         <chr>                                      <chr>
# 1      3 Superclass: Benzenoids       Class: Benzene and substituted derivatives NA
# 2      4 Superclass: Painkiller       NA                                         NA

问题分析

你之前使用的summarise_all(na.omit)会过滤掉组内全为NA的列,同时错误移除仅部分列有值的分组行,不符合需求。

解决方案

使用dplyr的across函数对每列单独处理,提取组内第一个非NA值(无有效值则保留NA):

library(dplyr)

df %>%
  group_by(Number) %>%
  summarise(across(everything(), ~ first(na.omit(.))), .groups = "drop")

原理说明

  • across(everything(), ~ first(na.omit(.))):对每一列先过滤NA值,再取第一个剩余值;若该列组内全为NA,first(na.omit(.))会返回NA,完美匹配需求。
  • .groups = "drop":分组完成后取消分组状态,返回普通DataFrame结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:00:47