使用从标题中提取的信息重命名 R 中的标题

问题描述

如何根据当前标题中的信息重命名 R 中的标题

我的 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"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...