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

如何基于其他列的TRUE/FALSE值创建含对应列名的新列?

解决方案

方法1:用tidyverse工具链快速实现

结合rowwise()、c_across()和字符串拼接函数就能搞定,代码如下:

library(tidyverse)

# 假设你的数据框叫df
df <- df %>%
  rowwise() %>%
  mutate(
    color = str_c(names(.)[c_across(red:blue) == TRUE], collapse = ", ")
  ) %>%
  ungroup()

# 如果要处理全为FALSE的行(比如示例里第4行显示purple),加个条件判断就行:
df <- df %>%
  rowwise() %>%
  mutate(
    color = ifelse(all(c_across(red:blue) == FALSE), 
                   "purple", 
                   str_c(names(.)[c_across(red:blue) == TRUE], collapse = ", "))
  ) %>%
  ungroup()

方法2:用base R实现(无需额外包)

不想加载tidyverse的话,用apply()逐行处理也很方便:

# 先指定所有逻辑值列的名称
logic_cols <- c("red", "yellow", "orange", "blue")

# 生成color列
df$color <- apply(df[logic_cols], 1, function(x) {
  true_cols <- names(x)[x == TRUE]
  if (length(true_cols) == 0) {
    "purple" # 全FALSE时的自定义值,可按需修改
  } else {
    paste(true_cols, collapse = ", ")
  }
})

注意事项

  • 两种方法都会自动把每行里值为TRUE的列名挑出来,用逗号分隔拼成字符串
  • 全FALSE的行可以自定义返回内容,比如示例里的"purple",改代码里的对应值就行
  • 如果你的逻辑列不是连续的red到blue,记得准确指定logic_cols里的列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:40:12