R语言如何从多列二分类矩阵生成指定分类的标签变量
问题原因
你之前的代码用rep()函数是按照「连续2个Bacteria A、连续3个Bacteria B、连续4个Bacteria C」的固定连续重复规则生成标签,但是实际你的矩阵列对应的标签没有这种连续排列的规律,所以得到的结果和预期不符。
通用解决方案(适配981列的批量打标签需求)
你已经明确所有列编码和标签的对应关系,推荐用映射匹配的方法实现,不需要依赖列的排列顺序,准确率更高。
方案1:全量对应表匹配(适用所有场景,无规律也能用)
第一步先整理你的列编码和标签的对应关系表,不管多少列都可以提前整理好:
# 测试用对应表示例,981列时把所有列的对应关系都补充到这个表里即可 label_map <- data.frame( col_code = c("X543.4","X543.5","X543.6","X543.7","X543.8","X543.9","X543.10","X543.11","X543.12"), sample = c("Bacteria B","Bacteria C","Bacteria B","Bacteria C","Bacteria C","Bacteria A","Bacteria C","Bacteria A","Bacteria C") )
第二步直接匹配矩阵列名生成标签表:
my_sample_col <- data.frame( sample = label_map$sample[match(colnames(df), label_map$col_code)], row.names = colnames(df) )
方案2:规则批量匹配(适用列标签有统一分类规则的场景)
如果你的标签可以通过列名的编码规则批量分类,直接用条件判断批量生成即可,不需要手动整理全量对应表:
library(dplyr) col_names <- colnames(df) sample_labels <- case_when( # 按你自己的分类规则补充条件即可 col_names %in% c("X543.9", "X543.11") ~ "Bacteria A", col_names %in% c("X543.4", "X543.6") ~ "Bacteria B", .default = "Bacteria C" ) my_sample_col <- data.frame(sample = sample_labels, row.names = col_names)
两种方案都可以直接扩容到981列的场景,不会出错。
内容的提问来源于stack exchange,提问作者biogamer.31
相关产品推荐
相关产品推荐

