J'ai un cadre de données avec un certain nombre de colonnes dans un formulaire var1.mean, var2.mean. Je souhaite supprimer le suffixe ".mean" de toutes les colonnes qui le contiennent. J'ai essayé d'utiliser rename_all conjointement avec regex dans un tube, mais je n'ai pas pu trouver une syntaxe correcte. Aucune suggestion?
Si vous souhaitez utiliser le package dplyr
, je vous recommande d'utiliser la fonction rename_at
.
Dframe <- data.frame(var1.mean = rnorm(10),
var2.mean = rnorm(10),
var1.sd = runif(10))
library(dplyr)
Dframe %>%
rename_at(.vars = vars(ends_with(".mean")),
.funs = funs(sub("[.]mean$", "", .)))
Nous pouvons utiliser rename_all
df1 %>%
rename_all(.funs = funs(sub("\\..*", "", names(df1)))) %>%
head(2)
# var1 var2 var3 var1 var2 var3
#1 -0.5458808 -0.09411013 0.5266526 -1.3546636 0.08314367 0.5916817
#2 0.5365853 -0.08554095 -1.0736261 -0.9608088 2.78494703 -0.2883407
REMARQUE: Si les noms de colonnes sont dupliqués, vous devez le rendre unique avec make.unique
.
set.seed(24)
df1 <- as.data.frame(matrix(rnorm(25*6), 25, 6, dimnames = list(NULL,
paste0(paste0("var", 1:3), rep(c(".mean", ".sd"), each = 3)))))
Le ci-dessous fonctionne pour moi
dat <- data.frame(var1.mean = 1, var2.mean = 2)
col_old <- colnames(dat)
col_new <- gsub(pattern = ".mean",replacement = "", x = col_old)
colnames(dat) <- col_new
Vous pouvez remplacer ces noms en utilisant la variable stringi
package stri_replace_last_regex
comme ceci:
require(stringi)
df <- data.frame(1,2,3,4,5,6)
names(df) <- stri_paste("var",1:6,c(".mean",".sd"))
df
## var1.mean var2.sd var3.mean var4.sd var5.mean var6.sd
##1 1 2 3 4 5 6
names(df) <- stri_replace_last_regex(names(df),"\\.mean$","")
df
## var1 var2.sd var3 var4.sd var5 var6.sd
##1 1 2 3 4 5 6
La regex est \\.mean$
car vous devez échapper au caractère point (il a une signification spéciale dans regex) et vous pouvez également ajouter le signe $
à la fin pour vous assurer de ne remplacer que les noms comportant ENDS avec ce modèle (si le texte .mean
est au milieu). de chaîne alors il ne sera pas remplacé).
Beaucoup de réponses rapides ont été données, la plus intuitive à mes yeux serait:
Dframe <- data.frame(var1.mean = rnorm(10), #Create Example
var2.mean = rnorm(10),
var1.sd = runif(10))
names(Dframe) <- gsub("[.]mean","",names(Dframe)) #remove ".mean"
J'utiliserais stringsplit:
x <- as.data.frame(matrix(runif(16), ncol = 4))
colnames(x) <- c("var1.mean", "var2.mean", "var3.mean", "something.else")
colnames(x) <- strsplit(colnames(x), split = ".mean")
colnames(x)