我有一个包含数千列的大型数据集。列名包含各种不需要的字符,如下所示:
col1_3x_xxx col2_3y_xyz col3_3z_zyx
我想从所有列名中删除以“_3”开头的所有字符串,以保留为clean:
col1 col2 col3
对于5000多个色谱柱,最有效的方法是什么?
bogh5gae1#
我们可以使用sub
sub
sub("_3.*", "", df1[,1]) #[1] "col1" "col2" "col3"
u1ehiz5o2#
我现在回答这个问题肯定已经晚了,但以防万一有人正在寻找解决方案
colnames(df1)[col] <- sub("_3.*", "", colnames(df1)[col])
如果您有多个列:
for ( col in 1:ncol(df1)){ colnames(df1)[col] <- sub("_3.*", "", colnames(df1)[col]) }
gpfsuwkq3#
我们可以使用正则表达式模式"^[^_]+(?=_)"来尝试str_extract:
"^[^_]+(?=_)"
str_extract
stringr::str_extract(c("col1_3x_xxx", "col2_3y_xyz", "col3_3z_zyx"), "^[^_]+(?=_)") [1] "col1" "col2" "col3"
其中在模式中:第一个^匹配字符串的开头;[^_]+匹配一个或多个非_字符,^_表示除_之外的任何字符。(?=...)代表lookahead,因此我们要查找_之前的模式。
^
[^_]+
_
^_
(?=...)
vh0rcniy4#
您可以使用
names(df) = gsub(pattern = "_3.*", replacement = "", x = names(df))
4条答案
按热度按时间bogh5gae1#
我们可以使用
sub
u1ehiz5o2#
我现在回答这个问题肯定已经晚了,但以防万一有人正在寻找解决方案
如果您有多个列:
gpfsuwkq3#
我们可以使用正则表达式模式
"^[^_]+(?=_)"
来尝试str_extract
:其中在模式中:
第一个
^
匹配字符串的开头;[^_]+
匹配一个或多个非_
字符,^_
表示除_
之外的任何字符。(?=...)
代表lookahead,因此我们要查找_
之前的模式。vh0rcniy4#
您可以使用