web-dev-qa-db-fra.com

Comment remplacer le "." dans les noms de colonnes générés par read.csv () avec un seul espace lors de l'exportation?

J'utilise R pour effectuer un prétraitement des données, et voici le problème auquel je suis confronté: j'entre les données à l'aide de read.csv(filename,header=TRUE), puis l'espace dans les noms de variables devient ".", Par exemple , une variable nommée Full Code est devenue Full.Code dans la trame de données générée. Après le traitement, j'utilise write.xlsx(filename) pour exporter les résultats, tandis que les noms des variables sont modifiés. Comment résoudre ce problème?

En outre, dans le fichier de sortie . Xlsx, la première colonne devient des indices (c'est-à-dire 1 à N), ce qui n'est pas ce que j'attends.

21
zeno tsang

Si votre ensemble check.names=FALSE dans read.csv lorsque vous lisez les données, les noms ne seront pas modifiés et vous n'aurez pas besoin de les modifier avant de les réécrire. Cela signifie bien sûr que vous auriez besoin de citer les noms des colonnes (guillemets dans certains cas) ou de faire référence aux colonnes par emplacement plutôt que par nom lors de la modification.

37
Greg Snow

Pour récupérer des espaces dans les noms, faites ceci (juste avant d'exporter - R vous laisse des espaces dans les noms de variables, mais c'est pénible):

# A simple regular expression to replace dots with spaces
# This might have unintended consequences, so be sure to check the results
names(yourdata) <- gsub(x = names(yourdata),
                        pattern = "\\.",
                        replacement = " ")

Pour supprimer l'index de la première colonne, ajoutez simplement row.names = FALSE À votre write.xlsx(). C'est un argument courant pour les fonctions qui écrivent des données au format tabulaire (write.csv() l'a aussi).

9
Matt Parker

Voici une fonction (désolé, je sais qu'elle pourrait être refactorisée) qui crée des noms de colonnes Nice même s'il y a plusieurs points consécutifs et des points de fin:

makeColNamesUserFriendly <- function(ds) {
  # FIXME: Repetitive.

  # Convert any number of consecutive dots to a single space.
  names(ds) <- gsub(x = names(ds),
                    pattern = "(\\.)+",
                    replacement = " ")

  # Drop the trailing spaces.
  names(ds) <- gsub(x = names(ds),
                    pattern = "( )+$",
                    replacement = "")
  ds
}

Exemple d'utilisation:

ds <- makeColNamesUserFriendly(ds)
4
Marcin Bilski

Pour compléter les réponses déjà fournies, voici une autre façon de remplacer le "." ou tout autre type de ponctuation dans les noms de colonne en utilisant une expression régulière avec le package stringr de la manière suivante:

require(“stringr”)   
colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")

Par exemple, essayez:

data <- data.frame(variable.x = 1:10, variable.y = 21:30, variable.z = "const")

colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")

et

colnames(data)

te donnera

[1] "variable x" "variable y" "variable z"
2
TimTeaFan