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

R语言如何将数据框多个二值列转换为单个字符列

R数据框多二值列转单字符拼接列实现方案

你需要实现的是按行识别取值为1的outcome_*列,提取列名对应的编号拼接为逗号分隔的字符列,以下是两种可直接运行的实现方式:

基础R实现(无需加载第三方包)

# 构造示例源数据
id <- c(1,2,3)
outcome_1 <- c(1,0,1)
outcome_2 <- c(1,1,0)
df1 <- data.frame(id,outcome_1,outcome_2)

# 提取所有结果列
outcome_col_names <- grep("^outcome_", names(df1), value = TRUE)

# 逐行拼接阳性结果
df2 <- data.frame(
  id = df1$id,
  outcome = apply(df1[outcome_col_names], 1, function(row_val) {
    # 筛选当前行值为1的列,提取编号后拼接
    hit_names <- names(row_val)[row_val == 1]
    paste(gsub("outcome_", "", hit_names), collapse = ",")
  }),
  stringsAsFactors = FALSE
)

运行后得到的df2与目标结构完全一致:

id outcome
1  1     1,2
2  2       2
3  3       1

Tidyverse实现(适配管道工作流)

如果日常使用tidyverse生态处理数据,可以用长宽表转换的逻辑实现,代码可读性更高:

library(dplyr)
library(tidyr)

df2 <- df1 |> 
  pivot_longer(
    cols = starts_with("outcome_"),
    names_to = "outcome_tag",
    values_to = "flag"
  ) |> 
  filter(flag == 1) |> 
  mutate(outcome_tag = gsub("outcome_", "", outcome_tag)) |> 
  summarise(
    outcome = paste(outcome_tag, collapse = ","),
    .by = id
  )

注意:两种方案输出的outcome列均为字符类型,若某行所有结果列取值为0,对应outcome会返回空字符串,可根据实际需求调整空值填充规则。

内容的提问来源于stack exchange,提问作者marc.th

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:48:41