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

如何基于列标题汇总检测状态,生成包含对应列名的新列?

问题描述

我有如下R数据框:

ID<- c(1,2,3,4,5)
CV<- c("Detected", "Not Detected", "Detected", "Not Detected", "Detected")
RV<- c("Not Detected", "Detected", "Not Detected", "Detected", "Not Detected")
BP<- c("Detected", "Detected", "Not Detected", "Detected", "Detected")
FL<- c("Detected", "Detected", "Not Detected", "Detected", "Detected")

df<- data.frame(ID, CV, RV, BP, FL)

希望为每行创建一个新列Result,将该行中值为Detected的列名用逗号拼接起来,最终效果如下:

IDCVRVBPFLResult
1DetectedNot DetectedDetectedDetectedCV, BP, FL
2Not DetectedDetectedDetectedDetectedRV, BP, FL
3DetectedNot DetectedNot DetectedNot DetectedCV
4Not DetectedDetectedDetectedDetectedRV, BP, FL
5DetectedNot DetectedDetectedDetectedCV, BP, FL
解决方案

以下是几种实现方式:

方法1:基础R实现

无需额外安装包,使用apply逐行处理:

df$Result <- apply(df[, -1], 1, function(x) {
  paste(names(x)[x == "Detected"], collapse = ", ")
})

方法2:tidyverse风格实现

使用dplyr的行处理功能:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(Result = paste(names(.)[-1][c_across(-ID) == "Detected"], collapse = ", ")) %>%
  ungroup()

方法3:data.table高效实现

适合处理大规模数据集:

library(data.table)
setDT(df)

df[, Result := apply(.SD, 1, function(x) paste(names(x)[x == "Detected"], collapse = ", ")), .SDcols = -"ID"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:10:16