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

如何在dplyr的summarise_all中移除缺失值并正确汇总数据

解决dplyr summarise_all的两个问题:缺失值处理与ID重复行

问题原因分析

  • 分组方式错误:你用group_by(df$ID)会额外生成一个名为df$ID的分组列,原ID列仍保留在数据中,这会导致后续汇总时出现重复的ID行和异常值。正确的分组应该直接引用列名group_by(ID)。
  • summarise_all用法错误:summarize_all(list, na.rm=TRUE)中的list不是有效的汇总函数,无法提取非缺失值。需要传入能提取单个非NA值的函数——因为你的数据里每个ID的每个genes列仅有一个非缺失值,用first(na.omit(.))或sum(na.rm=TRUE)都能实现需求。

解决方案代码

方法1:提取首个非缺失值(逻辑明确)

library(dplyr)

df1 <- df %>%
  group_by(ID) %>%
  summarize(
    `type of data` = NA_character_, # 按需求设为任意值或NA
    across(starts_with("genes"), ~ first(na.omit(.)))
  ) %>%
  ungroup() # 可选,取消分组状态避免后续操作异常

方法2:用sum汇总(适配单非NA值场景)

因为每个genes列在同一ID下只有一个非缺失值,sum(na.rm=TRUE)会直接返回该值:

df1 <- df %>%
  group_by(ID) %>%
  summarize(
    `type of data` = first(`type of data`), # 取任意一个type值即可
    across(starts_with("genes"), sum, na.rm = TRUE)
  ) %>%
  ungroup()

输出结果

运行后会得到你期望的格式:

ID type of data genes1 genes2 genes3
1  1          <NA>      2      0      2
2  2          <NA>      1      1      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:36:58