如何用R创建分组因子?现有代码报错寻求修正方案
修正R代码生成样本分组因子的问题
错误原因
原代码存在两个核心问题:
- 错误地给基因行添加
group列,而样本是数据框的列,分组应该对应列而非行; - 误用
as.factor()函数:as.factor()不支持levels/labels这类参数,这些是factor()函数的专属参数,且原代码传入空的character()作为输入,完全不符合需求。
修正后的完整代码
# 确保两个数据框的基因行一致(保留原代码的有效逻辑) bulk.normal <- bulk.normal[rownames(bulk.normal) %in% rownames(bulk.kirp),] bulk.kirp <- bulk.kirp[rownames(bulk.kirp) %in% rownames(bulk.normal),] # 合并得到完整数据框 bulk.all <- cbind(bulk.kirp, bulk.normal) # 生成对应样本的分组向量:先标记KIRP样本,再标记normal样本 group_vec <- c(rep("KIRP", ncol(bulk.kirp)), rep("normal", ncol(bulk.normal))) # 转换为指定水平的因子 group.factor <- factor(group_vec, levels = c("KIRP", "normal")) # 可选:给因子命名,与bulk.all的样本列名一一对应 names(group.factor) <- colnames(bulk.all)
验证结果
运行代码后,group.factor的输出与期望完全匹配:
> group.factor TCGA.2K.A9WE.01A TCGA.2Z.A9J1.01A TCGA.2Z.A9J3.01A TCGA.2Z.A9J5.01A TCGA.2Z.A9J6.01A KIRP KIRP KIRP KIRP KIRP TCGA.BQ.7051.11A TCGA.DZ.6132.11A TCGA.CZ.4864.11A TCGA.KN.8426.11A TCGA.CZ.5982.11A normal normal normal normal normal Levels: KIRP normal
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

