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

如何在R中按标识符选取各列最高值(含NA)

解决方案

首先修正你的可复现代码——原代码生成的数据框会把列名当成第一行数据,且所有列都是字符类型,正确的创建方式如下:

aa <- data.frame(
  ID = c("A", "A", "B", "B"),
  bin1 = c(1, 0, 0, 0),
  bin2 = c(0, NA, 0, 1),
  bin3 = c(0, 1, 0, 0),
  stringsAsFactors = FALSE
)

方法一:使用dplyr包(推荐,语法清晰)

加载dplyr包后,按ID分组,对每个二进制变量取最大值(你的规则NA<0<1正好匹配max的逻辑,max会自动忽略NA):

library(dplyr)

# 基础版本
result <- aa %>%
  group_by(ID) %>%
  summarise(across(starts_with("bin"), ~max(., na.rm = TRUE)))

# 处理某变量全为NA的情况(避免返回Inf)
result <- aa %>%
  group_by(ID) %>%
  summarise(across(starts_with("bin"), ~if(all(is.na(.))) NA else max(., na.rm = TRUE)))

方法二:使用Base R的aggregate函数

无需额外安装包,直接用base R实现:

# 基础版本
result <- aggregate(. ~ ID, data = aa, FUN = function(x) max(x, na.rm = TRUE))

# 处理全NA的情况
result <- aggregate(. ~ ID, data = aa, FUN = function(x) {
  if(all(is.na(x))) NA else max(x, na.rm = TRUE)
})

运行后得到的结果与你期望一致:

IDbin1bin2bin3
A101
B010

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:42:34