4
votes

Comment ajouter rapidement des guillemets et des virgules à une liste d'éléments pour c () dans R?

C'est avant tout une question de commodité. J'ajoute souvent des guillemets et des virgules à la main pour créer une liste c () pour une autre fonction. Existe-t-il un moyen rapide et intelligent de les ajouter qui n'implique pas de recherche / remplacement difficile ou plusieurs opérations? Si j'ai plusieurs éléments séparés par un espace ou une tabulation, ou un élément par ligne, j'aimerais faire ce qui suit:

ABCD

ou

A

B

C

D

to:

temp <- c("A", "B", "C", "D")

Je peux les ajouter à la main , faites une recherche / remplacement pour l'espace blanc sur "," puis ajoutez le premier / dernier, mais c'est ennuyeux. Existe-t-il un moyen plus rapide?

r

2 commentaires

Essayez avec dput (v1)


En regardant cela un an plus tard, je me rends compte que la demande d '«ajouter des virgules» aurait dû être considérée comme une opportunité d'éducation. Il n'y a pas de virgule dans le résultat temp ci-dessus. Au contraire, les virgules sont ajoutées par la fonction print pour signifier que les valeurs sont considérées comme de type caractère.


3 Réponses :


4
votes

Voici les options pour les fonctions de chaîne de base R et pour celles de stringr . Dans les deux cas, l'idée est de diviser le texte à chaque espace, puis de remplacer les limites des mots par un guillemet simple ( '). La raison de cela est de faire la différence avec les guillemets doubles ( ") qui commencent et finissent une chaîne, c'est-à-dire d'avoir des guillemets dans une chaîne. Vous devriez pouvoir faire la même chose en échappant double guillemets ( \\ "), mais je trouve que je les associe rarement correctement lorsque j'essaie de le faire, donc je ne l'ai pas testé. Ensuite, vous réduisez ce vecteur de chaînes par des virgules (peut également être une virgule suivie d'un espace).

Avec les fonctions de base:

txt %>%
  str_split("\\s") %>%
  `[[`(1) %>%
  str_replace_all("\\b", "'") %>%
  str_flatten(collapse = ",")
#> [1] "'A','B','C','D'"

Ou les tidyverse:

library(dplyr)
library(stringr)
txt <- "A B C D"

split_txt <- strsplit(txt, split = "\\s")[[1]]

quoted <- gsub("\\b", "'", split_txt)

paste(quoted, collapse = ",")
#> [1] "'A','B','C','D'"


0 commentaires

7
votes

La fonction scan est la base de toutes les fonctions read. * , mais elle sert également à exécuter la tâche que vous souhaitez exécuter. Il y a quelques années, un paramètre text a été ajouté afin que vous n'ayez plus besoin d'envelopper textConnection autour de "chaînes nues". Peut être utilisé avec n'importe quel délimiteur et le séparateur d'espaces par défaut gérera ce que vous demandez à être traité:

 TEMP <- scan(text="A B C D", what="")

#-------------------
Read 4 items
> TEMP
[1] "A" "B" "C" "D"
> dput(TEMP)
c("A", "B", "C", "D")


2 commentaires

Cela a résolu le problème de la copie de centaines de noms de colonnes à partir d'Excel et de renommer immédiatement un data.frame dans R (j'ai dû charger les données à partir d'un .dbf pour garder les 0 en tête, ce qui tronquait les noms de colonnes).


scan peut être une fonction très utile. C'est la base de read.table et de ses dérivés, mais parfois vous devez "rouler vos propres" fonctions d'entrée en utilisant un mélange de readLines , scan et gsub < / code> peut vous sortir de situations complexes que les fonctions read. * ne peuvent pas gérer.



2
votes

Même si c'est un peu délicat, vous pouvez créer et utiliser plusieurs curseurs dans RStudio.

Plusieurs curseurs peuvent être créés de différentes manières:

Appuyez sur Ctrl + Alt + {Haut / Bas} pour créer un nouveau curseur dans la direction enfoncée,

Appuyez sur Ctrl + Alt + Maj + {Direction} pour déplacer un deuxième curseur dans le direction,

Utilisez Alt et faites glisser avec la souris pour créer une sélection rectangulaire,

Utilisez Alt + Maj et cliquez pour créer une sélection rectangulaire de la position actuelle du curseur à la position cliquée.

Tiré de ici < / a> et gif de son apparence: entrez la description de l'image ici


0 commentaires