使用dplyr包:将值为TRUE的列后缀合并为新列
解决方案
Base R 实现(无需额外包)
# 筛选出前缀为"category/"的列 target_cols <- grepl("^category/", names(df)) # 提取列名的后缀部分 suffixes <- sub("category/", "", names(df)[target_cols]) # 逐行拼接TRUE对应的后缀 df$category <- apply(df[target_cols], 1, function(row) { paste(suffixes[row], collapse = " ") })
Tidyverse 风格实现(dplyr)
如果你习惯使用tidyverse工具链,这个方法更具可读性:
library(dplyr) library(stringr) df <- df %>% rowwise() %>% mutate( # 筛选目标列,提取后缀后拼接 category = paste( str_remove(names(pick(starts_with("category/")))[c_across(starts_with("category/"))], "category/"), collapse = " " ) %>% trimws() # 清理首尾可能的空格 ) %>% ungroup()
验证结果
运行上述代码后,数据集会生成符合逻辑的category列:
category/var1 category/var2 category/var3 category 1 TRUE FALSE TRUE var1 var3 2 FALSE TRUE TRUE var2 var3 3 TRUE FALSE FALSE var1
注:你提供的期望结果中第二行category值仅为var2,但根据原数据第二行category/var2和category/var3均为TRUE,正确结果应为var2 var3,上述代码会按逻辑生成正确拼接结果。
内容的提问来源于stack exchange,提问作者Nara McCray
相关产品推荐
相关产品推荐

