You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:30:02