R语言实现data.frame到带自定义名称长/行向量的转换
解决方案
你原有代码存在两处不符合需求的问题:
- 向量名称使用了患者TCGA ID,而非要求的
s1、s2……sn序列命名 - 未对两个数据集做患者ID匹配,直接按行取数容易出现样本顺序错配
步骤1:匹配对齐两个数据集的样本
首先将两个数据集按患者ID关联,保证每个样本的数值指标和分组标签一一对应:
# 将因子格式的patient列转为字符型,用于匹配 Sample_info$patient <- as.character(Sample_info$patient) # 构造Age表的患者ID列,和Sample_info匹配合并 match_df <- merge( x = data.frame( patient = rownames(Age), Blast_Percentage = Age$Blast_Percentage ), y = Sample_info[, c("patient", "FAB")], by = "patient", all.x = TRUE )
如果你确认两个数据集的行顺序完全一致(第n行对应同一个患者),可以跳过该匹配步骤,但临床数据常规建议做ID校验,避免顺序错误。
步骤2:生成目标数值型向量
# 提取原始数值列转为numeric类型,按顺序生成s+序号的名称 age_vec <- setNames( as.numeric(match_df$Blast_Percentage), paste0("s", seq_len(nrow(match_df))) ) # 校验类型 class(age_vec) # 输出 [1] "numeric"
输出格式和你给出的参考样式完全一致,名称为s1到sn,值对应原始的Blast_Percentage数值。
步骤3:生成目标字符型向量
# 提取分组列转为character类型,使用和数值向量完全一致的命名规则,保证样本顺序对应 group_vec <- setNames( as.character(match_df$FAB), paste0("s", seq_len(nrow(match_df))) ) # 校验类型 class(group_vec) # 输出 [1] "character"
输出格式和你给出的分组参考样式完全一致,名称和数值向量一一对应,值为FAB分型标签。
内容的提问来源于stack exchange,提问作者PesKchan
相关产品推荐
相关产品推荐

