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

R语言:如何基于Col1合并含有效值的重复行,排除空值/NA?

分组合并DataFrame时排除空值与NA

我尝试按Col1分组合并行,但数据框中存在空字段和NA值,希望仅合并Col2中的有效值(非空、非NA),排除空值/NA。当前使用的代码会将空值/NA一并合并:

merge_my_rows <- df %>%
  group_by(Col1) %>%
  summarise(Col2 = paste(Col2, collapse = ","))

示例数据框df

Col1Col2
F212ALICE
D23John
C64NA
F212BOB
C64NA
D23JohnY
D19Marquis

期望输出数据框

Col1Col2
F212ALICE, BOB
D23John, JohnY
C64NA
D19Marquis

(注:原期望输出中C64的两行NA应为合并后的单行NA,符合分组聚合逻辑)

修改后的代码

要实现仅合并有效值的需求,可在分组后先筛选出Col2中的非NA、非空值,再进行合并;若分组内无有效值,则保留NA:

library(dplyr)

merge_my_rows <- df %>%
  group_by(Col1) %>%
  summarise(Col2 = {
    # 筛选非NA且非空的有效值
    valid_values <- Col2[!is.na(Col2) & Col2 != ""]
    # 根据有效值是否存在返回结果
    if (length(valid_values) == 0) {
      NA_character_
    } else {
      paste(valid_values, collapse = ", ")
    }
  }, .groups = "drop")

代码说明

  1. Col2[!is.na(Col2) & Col2 != ""]:同时过滤NA值和空字符串,仅保留有效值
  2. 通过判断处理全NA/空的分组:若没有有效值,返回NA_character_;否则用paste合并有效值,并用, 分隔
  3. .groups = "drop":取消分组状态,返回普通数据框

如果你的数据中空字段仅为NA(无空字符串),可以简化为:

merge_my_rows <- df %>%
  group_by(Col1) %>%
  summarise(Col2 = if (all(is.na(Col2))) {
    NA_character_
  } else {
    paste(na.omit(Col2), collapse = ", ")
  }, .groups = "drop")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:03:36