lapply 2在一个命令中起作用

BiX*_*XiC 2 r names lapply dataframe

我想更改数据框中的一些名称 df

> names(df)[17:26]
[1] "X1."  "X2."  "X3."  "X4."  "X5."  "X6."  "X7."  "X8."  "X9."  "X10."
Run Code Online (Sandbox Code Playgroud)

我想要"X" - >"到达"并删除点.我用lapply:

change <- function(d){
    gsub("X","reach",d) 
    gsub("\\.","",d)
}
a <- as.character(lapply(names(df)[17:26], change))
Run Code Online (Sandbox Code Playgroud)

但"X"没有改变.为什么?

> a 
[1] "X1"  "X2"  "X3"  "X4"  "X5"  "X6"  "X7"  "X8"  "X9"  "X10"
Run Code Online (Sandbox Code Playgroud)

Sim*_*lon 6

您可以在单个gsub使用后引用(模式表达式的括号部分)中执行此操作.

x <- names(df)[17:26]
gsub( "X([0-9]+)." , "Reach\\1" , x )
# [1] "Reach1"  "Reach2"  "Reach3"  "Reach4"  "Reach5"  "Reach6"  "Reach7"  "Reach8"  "Reach9"  "Reach10"
Run Code Online (Sandbox Code Playgroud)

我们匹配您的名字向量中的数字,[0-9]+并在括号中包围它们,我们制作所谓的后向引用.我们可以通过它的后引用来引用括号内匹配的东西.因为这是第一组括号,所以它的后引用是\\1.如果我们有另一组括号,我们可以将其称为\\2.所以我们匹配X,然后是一些数字然后匹配..我们用Reach括号中的数字和括号内的数字替换它,使用后引用\\1.

我希望这个解释有意义!这不是最清楚的.

  • 确实很好 (2认同)