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

在R语言中基于条件列名创建数据框新列

解决方案

以下是几种在R中实现需求的方法,适用于不同场景:

基础R方法

无需额外包,直接用内置函数处理:

# 生成目标列
data$Column_D <- apply(data[, -which(names(data) == "Reference")], 1, function(row) {
  # 提取当前行值为TRUE的列名,并用逗号拼接
  paste(names(row)[row], collapse = ", ")
})

解释:data[, -which(names(data) == "Reference")]筛选出除Reference外的列,apply(..., 1)按行遍历,每行中筛选出值为TRUE的列名,再用paste拼接成字符串。

tidyverse 方法

适合习惯tidy语法的用户,需加载dplyr包:

library(dplyr)

data <- data %>%
  rowwise() %>%
  # 遍历除Reference外的所有列,筛选值为TRUE的列名并拼接
  mutate(Column_D = paste(names(pick(-Reference))[c_across(-Reference)], collapse = ", ")) %>%
  ungroup()

如果是超大型数据集,rowwise效率较低,可改用purrr的批量处理:

library(dplyr)
library(purrr)

data <- data %>%
  mutate(Column_D = pmap_chr(pick(-Reference), ~{
    row_vals <- c(...)
    paste(names(row_vals)[row_vals], collapse = ", ")
  }))

data.table 方法

针对大型数据集优化,效率更高,需加载data.table包:

library(data.table)

# 将data.frame转为data.table
setDT(data)
# 按Reference分组(逐行处理),生成目标列
data[, Column_D := {
  row_cols <- .SD
  paste(names(row_cols)[row_cols], collapse = ", ")
}, by = Reference, .SDcols = -"Reference"]

执行上述任意方法后,查看data即可得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:20:55