如何基于其他列的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
相关产品推荐
相关产品推荐

