r删除某些字符后的列名称部分

pyn*_*yne 6 r

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

col1_3x_xxx
col2_3y_xyz
col3_3z_zyx
Run Code Online (Sandbox Code Playgroud)

我想从所有列名中删除以“ _3”开头的所有字符串,使其保持干净:

col1
col2
col3
Run Code Online (Sandbox Code Playgroud)

对于5000+列,最有效的方法是什么?

Ren*_*han 9

这个答案肯定晚了,但以防万一有人正在寻找解决方案

colnames(df1)[col] <-  sub("_3.*", "", colnames(df1)[col])
Run Code Online (Sandbox Code Playgroud)

如果您有多个列:

for ( col in 1:ncol(df1)){
    colnames(df1)[col] <-  sub("_3.*", "", colnames(df1)[col])
}
Run Code Online (Sandbox Code Playgroud)


akr*_*run 6

我们可以用 sub

sub("_3.*", "", df1[,1])
#[1] "col1" "col2" "col3"
Run Code Online (Sandbox Code Playgroud)

  • 我通过用“colnames(df1)”替换对象“df1[,1]”取得了成功。 (2认同)
  • 是否有可能的“dplyr”版本? (2认同)

Psi*_*dom 5

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

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

模式中的位置:

第一个^匹配字符串的开头;[^_]+匹配一个或多个非_字符,^_表示除 之外的任何字符_(?=...) 代表lookahead,所以我们正在寻找 之前的模式_

  • 不需要非捕获组:`str_extract(cols, "^[^_]+")`。与 Gregor 的建议速度几乎相同:`sub(pattern = "_3.*", replacement = "", x = cols, perl = TRUE)` (2认同)