问题描述
我的 df 看起来像:
标题:(索引;d__Bacteria.p__Actinobacteriota.c__Actinobacteria;d__Bacteria.p__Bacteroidota.c__Bacteroidia)
第 1 行:(BF13A;0;14572)
第 2 行:(BF13B;0;24215)
等
我想将包含分类信息 (d__Bacteria.) 的列重命名为仅包含 c__ 之后的信息
标题:(索引;放线菌;拟杆菌)
第 1 行:(BF13A;0;14572)
第 2 行:(BF13B; 0; 24215)
等
顺便说一句,我的分类信息列多于两列,因此该解决方案也适用于更大的 df。
解决方法
您可以使用 tidyverse
重命名列。像下面这样,
library(tidyverse)
df %>%
rename(
Actinobacteria = d__Bacteria.p__Actinobacteriota.c__Actinobacteria,Bacteroidia = d__Bacteria.p__Bacteroidota.c__Bacteroidia
)
这也可以使用基本函数来完成
names(df)[names(df) == "d__Bacteria.p__Actinobacteriota.c__Actinobacteria"] <- "Actinobacteria"
names(df)[names(df) == "d__Bacteria.p__Bacteroidota.c__Bacteroidia"] <- "Bacteroidia"
你可以像这样修改旧的名称,而不是设置新的列名
new_df <- df %>%
setNames(substring(names(.),regexpr(".c_",names(.)) + 4))
> colnames(new_df)
[1] "Actinobacteria" "Bacteroidia"