R语言如何从数据框行名提取物种信息生成Species因子列
R语言实现行名提取物种生成因子列的方法
首先给出你提供的示例数据框代码:
df <- structure(list(PC1 = c(-0.0277818345657933, -0.0342426301759117, -0.0328199061848987, 0.0557338197779853, 0.042369402931087), PC2 = c(-0.0149291182738773, -0.00862145986823889, -0.0101822421485786, -0.00862630869071877, -0.00419434673647331)), row.names = c("Homo sapiens - ULAC-0968", "Homo sapiens - ULAC-0978", "Homo sapiens - ULAC-0996", "Pan troglodytes - HTB2804", "Pan troglodytes - HTB411"), class = "data.frame")
方法1:基础R实现
不需要加载任何第三方包,直接用内置函数完成:
# 按分隔符" - "拆分行名,取第一部分作为物种值,直接转为因子 df$Species <- factor(sapply(strsplit(rownames(df), split = " - "), function(x) x[1])) # 查看生成的因子水平,确认只有两个目标值 levels(df$Species)
运行后levels(df$Species)会返回 [1] "Homo sapiens" "Pan troglodytes",完全符合要求。
方法2:tidyverse语法实现
如果你习惯使用dplyr的管道操作,可以用stringr的正则提取功能更简洁地完成:
library(dplyr) library(stringr) df <- df %>% # 提取行名中" - "前面的所有字符,转为因子 mutate(Species = factor(str_extract(rownames(.), pattern = "^.+(?= - )")))
两种方法最终得到的Species列都是仅包含两个目标水平的因子列,可直接用于后续分析。
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

