在我的数据框中,许多列名以“.y”结尾,如示例所示:
dat <- data.frame(x1=sample(c(0:1)), id=sample(10), av1.y = sample(10) , av2.y = sample(10) , av3.y = sample(10),av4.y=sample(10))
dat
我想摆脱以.y结尾的所有列名的最后两个字符,并保持其他字符不变,以便拥有这样的数据框:
colnames(dat) <- c("x1","id","av1","av2","av3","av4")
dat
如何在不重新输入所有列名的情况下实现此目的?我找到了一种方法来处理单个字符串,但不知道如何在一系列字符串上重复这样做:
library(stringi)
stri_sub("av3.y",1,3)
答案 0 :(得分:5)
一种可能性是gsub
:
gsub(pattern = ".y", replacement = "", x = names(dat), fixed = TRUE)
# [1] "x1" "id" "av1" "av2" "av3" "av4"
字符串的结尾更明确地匹配“.y”:
gsub(pattern = "\\.y$", replacement = "", x = names(dat))
答案 1 :(得分:1)
stri_sub
函数是工作的人:)看看文档。您可以使用负值从字符串末尾获取子字符串计数,如下所示:
stri_sub("abc1.y",1,-1) #whole string
## [1] "abc1.y"
stri_sub("abc1.y",1,-3) #without last two characters
## [1] "abc1"
并且它也是矢量化的,所以你可以在vector上使用这个函数:)
stri_sub(c("abc1.y","V1.y","somethingreallylong.y"),1,-3)
## [1] "abc1" "V1" "somethingreallylong"