Cambiar en R nombre de una columna con caracteres ( - y ())

Hola buenas tardes.
Estoy intentando cambiar en R el nombre de una columna que tiene guiones (-) y paréntesis () por otro que no tenga estos caracteres, y no encuentro ninguna información para realizarlo.
Para plantear más claramente el problema que tengo, quiero cambiar tBodyAcc-mean() por tBodyAccmean.
He cargado el paquete de "tidyverse" y su librería, así como, las librerías de "dplyr y tidyr" .

Si alguien me puede ayudar se lo agradecería.

Gracias

1 Like

Hi @Ana_Maria_Jimenez_Or , an easy way for to change the names columns with base code:

coords <- data.frame(x = c(-5.5, -5.5, -5.3, -5.3),
                     y = c(36.7, 36.8, 36.7, 36.8))

names(coords)[1] <- 'latitud' #  for first column
names(coords)[2] <- 'longitud' #  for second column

coords
# latitud longitud
# 1    -5.5     36.7
# 2    -5.5     36.8
# 3    -5.3     36.7
# 4    -5.3     36.8

# is a good way when  you have a few columns

Buenas noches, @M_AcostaCH .

Primero darte las gracias por responderme

He intentado hacer este código que me has indicado pero tengo 7352 registros y no sé como afrontarlo.

Te adjunto una captura de pantalla

Gracias

This may work

Example


library("stringr")
dd  <- c("aa-ff", "bb-gg", "ww-ccc", "bbd-llll")
str_replace(dd, "-", "")      

So perhaps

names(train_lecturas_df) <- str_replace(names(train_lecturas_df), "-", "") 

Creo que algo como esto sería mejor

names(train_lecturas_df) <- str_remove_all(names(train_lecturas_df), "[-()]")

Por ejemplo

library(stringr)

text <- "tBodyAcc-mean()"

str_remove_all(text, "[-()]")
#> [1] "tBodyAccmean"

Created on 2023-03-03 with reprex v2.0.2

Nota: Por favor trata de hacer tus preguntas proporcionando un "Ejemplo Minimo Reproducible" (REPREX en ingles), es la forma más efectiva (y cortez) de pedir ayuda en temas de programación.

Buenas tardes @andresrcs .

He hecho lo que me has comentado y me ha salido, pero a la hora de hacer un "select" de dos columnas me sale error.

Te adjunto captura de pantalla.

Gracias jrkrideau por tu respuesta.

Lo he realizado pero no me sale ningún cambio en las columnas y no puedo hacer un "select".

Gracias de nuevo

Lo que has echo es copiar el ejemplo que puse para ilustrar el resultado (ya que sigues sin proporcionar un reprex). Eso no va a tener ningún efecto en tu data frame.

Este es el código que tienes que ejecutar

names(train_lecturas_df) <- str_remove_all(names(train_lecturas_df), "[-()]")

Donde train_lecturas_df es el nombre del data frame que está siendo modificado, si deseas modificar uno diferente (cómo en el screenshots que muestras) debes reemplazarlo por el nombre correspondiente.

Por favor ten en cuenta que ignorar las buenas prácticas del foro, como hacer preguntas proporcionando un reprex y no utilizar screenshots para mostrar tu código se puede interpretar cómo una mala actitud hacia la comunidad y el foro.

Perdona, no era mi intención.

Te dejo los enlaces de los conjuntos de datos que estoy utilizando.

Gracias.

The following code shows two things:

  1. How to take the full 7352 x 563 data set in train.csv, reduce it to a small sample and produce a forum-friendly output with dput().
  2. How to use @andresrcs's code to change the column names of the data frame.

Only the second part would normally be posted.

####First part
#read in the whole data set
DF <- read.csv("~/R/Play/train.csv", check.names = FALSE)
#Choose a few row and columns
#DFsample <- DF[1:10, 1:5]
DFsample
#>    tBodyAcc-mean()-X tBodyAcc-mean()-Y tBodyAcc-mean()-Z tBodyAcc-std()-X
#> 1          0.2885845      -0.020294171        -0.1329051       -0.9952786
#> 2          0.2784188      -0.016410568        -0.1235202       -0.9982453
#> 3          0.2796531      -0.019467156        -0.1134617       -0.9953796
#> 4          0.2791739      -0.026200646        -0.1232826       -0.9960915
#> 5          0.2766288      -0.016569655        -0.1153619       -0.9981386
#> 6          0.2771988      -0.010097850        -0.1051373       -0.9973350
#> 7          0.2794539      -0.019640776        -0.1100221       -0.9969210
#> 8          0.2774325      -0.030488303        -0.1253604       -0.9965593
#> 9          0.2772934      -0.021750698        -0.1207508       -0.9973285
#> 10         0.2805857      -0.009960298        -0.1060652       -0.9948034
#>    tBodyAcc-std()-Y
#> 1        -0.9831106
#> 2        -0.9753002
#> 3        -0.9671870
#> 4        -0.9834027
#> 5        -0.9808173
#> 6        -0.9904868
#> 7        -0.9671859
#> 8        -0.9667284
#> 9        -0.9612453
#> 10       -0.9727584

#Use dput to make output that can be posted to the forum and used easily by others
dput(DFsample)
#> structure(list(`tBodyAcc-mean()-X` = c(0.28858451, 0.27841883, 
#> 0.27965306, 0.27917394, 0.27662877, 0.27719877, 0.27945388, 0.27743247, 
#> 0.27729342, 0.28058569), `tBodyAcc-mean()-Y` = c(-0.020294171, 
#> -0.016410568, -0.019467156, -0.026200646, -0.016569655, -0.01009785, 
#> -0.019640776, -0.030488303, -0.021750698, -0.0099602983), `tBodyAcc-mean()-Z` = c(-0.13290514, 
#> -0.12352019, -0.11346169, -0.12328257, -0.11536185, -0.10513725, 
#> -0.11002215, -0.12536043, -0.12075082, -0.10606516), `tBodyAcc-std()-X` = c(-0.9952786, 
#> -0.99824528, -0.99537956, -0.99609149, -0.99813862, -0.99733496, 
#> -0.99692104, -0.99655926, -0.99732847, -0.99480344), `tBodyAcc-std()-Y` = c(-0.98311061, 
#> -0.97530022, -0.96718701, -0.9834027, -0.98081727, -0.99048681, 
#> -0.96718593, -0.96672843, -0.96124532, -0.9727584)), row.names = c(NA, 
#> 10L), class = "data.frame")

######Second part
#Use the output of dput to make a small data frame
DF_forum <- structure(list(`tBodyAcc-mean()-X` = c(0.28858451, 0.27841883, 
                                                   0.27965306, 0.27917394, 0.27662877, 0.27719877, 0.27945388, 0.27743247, 
                                                   0.27729342, 0.28058569), 
                           `tBodyAcc-mean()-Y` = c(-0.020294171, -0.016410568, -0.019467156, -0.026200646, -0.016569655, -0.01009785, 
                                                   -0.019640776, -0.030488303, -0.021750698, -0.0099602983), 
                           `tBodyAcc-mean()-Z` = c(-0.13290514, 
                                                   -0.12352019, -0.11346169, -0.12328257, -0.11536185, -0.10513725, 
                                                   -0.11002215, -0.12536043, -0.12075082, -0.10606516), 
                           `tBodyAcc-std()-X` = c(-0.9952786, 
                                                  -0.99824528, -0.99537956, -0.99609149, -0.99813862, -0.99733496, 
                                                  -0.99692104, -0.99655926, -0.99732847, -0.99480344), 
                           `tBodyAcc-std()-Y` = c(-0.98311061, 
                                                  -0.97530022, -0.96718701, -0.9834027, -0.98081727, -0.99048681, 
                                                  -0.96718593, -0.96672843, -0.96124532, -0.9727584)), 
                      row.names = c(NA, 10L), class = "data.frame")

DF_forum
#>    tBodyAcc-mean()-X tBodyAcc-mean()-Y tBodyAcc-mean()-Z tBodyAcc-std()-X
#> 1          0.2885845      -0.020294171        -0.1329051       -0.9952786
#> 2          0.2784188      -0.016410568        -0.1235202       -0.9982453
#> 3          0.2796531      -0.019467156        -0.1134617       -0.9953796
#> 4          0.2791739      -0.026200646        -0.1232826       -0.9960915
#> 5          0.2766288      -0.016569655        -0.1153619       -0.9981386
#> 6          0.2771988      -0.010097850        -0.1051373       -0.9973350
#> 7          0.2794539      -0.019640776        -0.1100221       -0.9969210
#> 8          0.2774325      -0.030488303        -0.1253604       -0.9965593
#> 9          0.2772934      -0.021750698        -0.1207508       -0.9973285
#> 10         0.2805857      -0.009960298        -0.1060652       -0.9948034
#>    tBodyAcc-std()-Y
#> 1        -0.9831106
#> 2        -0.9753002
#> 3        -0.9671870
#> 4        -0.9834027
#> 5        -0.9808173
#> 6        -0.9904868
#> 7        -0.9671859
#> 8        -0.9667284
#> 9        -0.9612453
#> 10       -0.9727584

#rename the columns
library(stringr)
names(DF_forum) <- str_remove_all(names(DF_forum), "[-()]")
DF_forum
#>    tBodyAccmeanX tBodyAccmeanY tBodyAccmeanZ tBodyAccstdX tBodyAccstdY
#> 1      0.2885845  -0.020294171    -0.1329051   -0.9952786   -0.9831106
#> 2      0.2784188  -0.016410568    -0.1235202   -0.9982453   -0.9753002
#> 3      0.2796531  -0.019467156    -0.1134617   -0.9953796   -0.9671870
#> 4      0.2791739  -0.026200646    -0.1232826   -0.9960915   -0.9834027
#> 5      0.2766288  -0.016569655    -0.1153619   -0.9981386   -0.9808173
#> 6      0.2771988  -0.010097850    -0.1051373   -0.9973350   -0.9904868
#> 7      0.2794539  -0.019640776    -0.1100221   -0.9969210   -0.9671859
#> 8      0.2774325  -0.030488303    -0.1253604   -0.9965593   -0.9667284
#> 9      0.2772934  -0.021750698    -0.1207508   -0.9973285   -0.9612453
#> 10     0.2805857  -0.009960298    -0.1060652   -0.9948034   -0.9727584

Created on 2023-03-04 with reprex v2.0.2

1 Like

Muchas gracias @FJCC y andresrcs por ayudarme a trabajar con R e indicarme como debo comportarme en el foro a la hora de pediros ayuda.
Gracias y perdonad mis torpezas.

Que tengáis una feliz semana

This topic was automatically closed 42 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.