我想更改数据框df
> names(df)[17:26]
[1] "X1." "X2." "X3." "X4." "X5." "X6." "X7." "X8." "X9." "X10."
我想要“X” - > “到达”并删除点。 我使用了lapply:
change <- function(d){
gsub("X","reach",d)
gsub("\\.","",d)
}
a <- as.character(lapply(names(df)[17:26], change))
但“X”没有改变。为什么呢?
> a
[1] "X1" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X10"
答案 0 :(得分: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"
我们使用[0-9]+
匹配名称向量中的数字,并将它们括在括号中,我们制作所谓的后向引用。我们可以通过它的后引用来引用括号内匹配的东西。由于这是第一组括号,因此它的后引用为\\1
。如果我们有另一组括号,我们可以将其称为\\2
。我们匹配X
,然后匹配一些数字,然后匹配.
。我们将Reach
替换为\\1
以及括号内匹配的数字,方法是使用{{1}}引用后引用。
我希望这个解释有意义!这不是最清楚的。