使用str_split_fixed拆分分类单元ID后保留原始行名的方法
保留拆分后的原始行名解决方案
你遇到的问题是因为str_split_fixed()返回的是矩阵,转成data.frame时默认生成1:n的行名,而你直接用这个新数据框覆盖了原数据,导致原始行名丢失。以下几种方法可以解决:
方法1:先保存原始行名,拆分后重新赋值
# 保存原始行名 orig_rownames <- rownames(tax.example) # 执行拆分并转成数据框 tax.example <- data.frame(str_split_fixed(tax.example$phylodist, ";", 8)) # 恢复原始行名 rownames(tax.example) <- orig_rownames
方法2:不覆盖原数据框,替换列内容
这种方式不需要单独保存行名,直接在原数据框上修改:
# 拆分得到矩阵 split_mat <- str_split_fixed(tax.example$phylodist, ";", 8) # 将矩阵转成数据框并添加为新列 tax.example[, paste0("X", 1:8)] <- as.data.frame(split_mat) # 若不需要原列,可删除 tax.example$phylodist <- NULL
方法3:用tidyr包的separate函数(更简洁)
tidyr::separate()可以直接拆分列并自动保留原始行名,代码更直观:
library(tidyr) tax.example <- tax.example %>% separate(phylodist, into = paste0("X", 1:8), sep = ";")
测试任意一种方法后,tax.example的行名会保留原始的phylo1到phylo5。
内容的提问来源于stack exchange,提问作者Geomicro
相关产品推荐
相关产品推荐

