r删除列名中某些字符后的部分内容

uhry853o  于 2023-01-15  发布在  其他
关注(0)|答案(4)|浏览(203)

我有一个包含数千列的大型数据集。列名包含各种不需要的字符,如下所示:

col1_3x_xxx
col2_3y_xyz
col3_3z_zyx

我想从所有列名中删除以“_3”开头的所有字符串,以保留为clean:

col1
col2
col3

对于5000多个色谱柱,最有效的方法是什么?

bogh5gae

bogh5gae1#

我们可以使用sub

sub("_3.*", "", df1[,1])
#[1] "col1" "col2" "col3"
u1ehiz5o

u1ehiz5o2#

我现在回答这个问题肯定已经晚了,但以防万一有人正在寻找解决方案

colnames(df1)[col] <-  sub("_3.*", "", colnames(df1)[col])

如果您有多个列:

for ( col in 1:ncol(df1)){
    colnames(df1)[col] <-  sub("_3.*", "", colnames(df1)[col])
}
gpfsuwkq

gpfsuwkq3#

我们可以使用正则表达式模式"^[^_]+(?=_)"来尝试str_extract

stringr::str_extract(c("col1_3x_xxx", "col2_3y_xyz", "col3_3z_zyx"), "^[^_]+(?=_)")
[1] "col1" "col2" "col3"

其中在模式中:
第一个^匹配字符串的开头;[^_]+匹配一个或多个非_字符,^_表示除_之外的任何字符。(?=...)代表lookahead,因此我们要查找_之前的模式。

vh0rcniy

vh0rcniy4#

您可以使用

names(df) = gsub(pattern = "_3.*", replacement = "", x = names(df))

相关问题