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

如何用dplyr基于重复Gene.names合并Case与Control列值到同行

基于dplyr合并重复基因行的解决方案

问题场景

现有如下tibble数据:

# A tibble: 4 × 3
  Gene.names  Case Control
  <chr>      <dbl>   <dbl>
1 A1BG          52      NA
2 A1BG          NA      32
3 A2M           16      NA
4 A2M           NA      15

可以看到Gene.names列存在重复值,Case和Control列分别对应有非空值,需要将每个Gene.names对应的Case和Control值合并到同一行,寻求基于dplyr的解决方案。

数据定义

df <- structure(list(Gene.names = c("A1BG", "A1BG", "A2M", "A2M"), 
               Case = c(52, NA, 16, NA), Control = c(NA, 32, NA, 15)), row.names = c(NA, 
                                                                                     -4L), class = c("tbl_df", "tbl", "data.frame"))

dplyr解决方案

可以通过group_by按Gene.names分组,再用summarize结合across对每组的Case和Control列提取非NA值:

library(dplyr)

df_cleaned <- df %>%
  group_by(Gene.names) %>%
  summarize(across(c(Case, Control), ~ first(na.omit(.x)))) %>%
  ungroup()

也可以用max(na.rm = TRUE)替代first(na.omit(.x)),因为每组中目标列仅存在一个非NA值,两种方式效果一致:

df_cleaned <- df %>%
  group_by(Gene.names) %>%
  summarize(across(c(Case, Control), ~ max(.x, na.rm = TRUE))) %>%
  ungroup()

预期输出

Gene.names  Case Control
  <chr>      <dbl>   <dbl>
1 A1BG          52      32
2 A2M           16      15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:40:28