我有一个包含数千列的大型数据集。列名包括各种不需要的字符,如下所示:
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+列,最有效的方法是什么?
这个答案肯定晚了,但以防万一有人正在寻找解决方案
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)
我们可以用 sub
sub("_3.*", "", df1[,1])
#[1] "col1" "col2" "col3"
Run Code Online (Sandbox Code Playgroud)
我们可以尝试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,所以我们正在寻找 之前的模式_。