在R中实现DataFrame行去重与列对齐的方法求助
合并DataFrame中重复Sample行的非NA值
输入数据
| Sample | Var1 | Var2 |
|---|---|---|
| A | 1 | NA |
| B | NA | 1 |
| A | NA | 3 |
| C | NA | 2 |
| C | 5 | NA |
| B | 4 | NA |
期望输出
| Sample | Var1 | Var2 |
|---|---|---|
| A | 1 | 3 |
| B | 4 | 1 |
| C | 5 | 2 |
解决方案(R tidyverse)
你可以用dplyr的分组聚合实现,核心是对每个Sample组提取各列的非NA有效值:
library(dplyr) # 假设你的数据框名为df df_cleaned <- df %>% group_by(Sample) %>% summarise( Var1 = max(Var1, na.rm = TRUE), Var2 = max(Var2, na.rm = TRUE) )
如果变量是字符串类型,用first(na.omit(Var1))替代max更稳妥:
df_cleaned <- df %>% group_by(Sample) %>% summarise( Var1 = first(na.omit(Var1)), Var2 = first(na.omit(Var2)) )
多列场景下用across简化代码:
df_cleaned <- df %>% group_by(Sample) %>% summarise(across(everything(), ~ first(na.omit(.))))
为什么之前的group_by失败?
大概率是仅完成分组但未配合正确的聚合逻辑——你需要对每一列指定处理NA值的规则,提取唯一有效值,而非仅分组后无后续操作。
内容的提问来源于stack exchange,提问作者code_rookie
相关产品推荐
相关产品推荐

