如何在R中基于行内列值生成条件合并的新列trt?
在R中为DataFrame添加组合列的解决方案
首先构造符合需求的示例数据(空白处用NA表示):
df <- data.frame( F1 = c(1, 1, 1), F2 = c(1, NA, NA), F3 = c(NA, 1, NA), F4 = c(NA, NA, 1), stringsAsFactors = FALSE )
方法1:基础R原生实现
直接按行遍历,提取每行值为1的列名并拼接:
df$trt <- apply(df, 1, function(row) { paste(names(row)[row == 1], collapse = "_") })
方法2:Tidyverse工具链实现(dplyr风格)
如果你习惯使用tidyverse生态,有两种简洁写法:
写法A:用rowwise()逐行处理
library(dplyr) df <- df %>% rowwise() %>% mutate(trt = paste(names(.)[c_across(everything()) == 1], collapse = "_")) %>% ungroup()
写法B:用pmap_chr()映射处理
library(dplyr) library(purrr) df <- df %>% mutate(trt = pmap_chr(., ~ paste(names(c(...))[c(...) == 1], collapse = "_")))
适配说明
如果你的数据中空白对应的是0而非NA,只需要把代码里的row == 1替换为row != 0即可。
内容的提问来源于stack exchange,提问作者vimbayi chimonyo
相关产品推荐
相关产品推荐

