2

在我的数据框中,许多列名以“.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)
4

2 回答 2

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))
于 2014-03-17T23:44:02.883 回答
2

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"

而且它也是矢量化的,所以你可以在矢量上使用这个函数:)

stri_sub(c("abc1.y","V1.y","somethingreallylong.y"),1,-3)
## [1] "abc1"                "V1"                  "somethingreallylong"
于 2014-03-26T11:52:19.533 回答