2017-09-21 14 views
0

Je voudrais lire un fichier csv et utiliser les noms de colonnes à partir de variables. Bien sûr, les chaînes dans les variables sont égales aux noms de colonnes du fichier csv.R: lire csv avec les noms de colonnes dans les variables

Le nom dans la colonne dans le csv est par exemple. "nom", "ps" et "année". Quand je voudrais juste lire le csv et d'assigner des types de colonnes (sans variables) J'utilise:

library(readr) 
CarTest <- read_csv("~/_file.csv", 
            col_types = cols( 
            name = col_character(), 
            year_a = col_character(),  
            ps =col_double())) 

L'idée est d'attribuer le nom des colonnes dans une variable pour faire en sorte que si les noms de colonnes le fichier csv est changé, juste les chaînes de variables doivent aussi être changées. Donc, je voudrais attribuer les noms de colonnes dans les variables avant (toujours les noms de colonnes dans le fichier csv et les chaînes dans les variables sont les mêmes). J'ai essayé différentes approches: Cet exemple (j'espère) montre, que j'essaye de coller la chaîne de la variable car_names dans la fonction read_csv. Mais de toute évidence get est la mauvaise approche:

library(readr)  
car_names <- "name"  
engine_power <- "ps" 
year_a <-"year" 



    CarTest <- read_csv("~/_file.csv", 
            col_types = cols( 

            get("car_names") = col_character(), 
            get("year_a") = col_character(),  
            get("engine_power") =col_double())) 

Merci pour votre aide;)

+2

S'il vous plaît, spécifiez le paquet que vous utilisez. 'read_csv()' ne fait pas partie de la base R. – Uwe

+0

J'utilise la bibliothèque (readr). –

+3

S'il vous plaît, [modifier] votre question en conséquence et assurez-vous qu'il s'agit d'un [mcve] - Merci. – Uwe

Répondre

0

Vous pouvez simplement spécifier les noms de colonnes avec l'argument col_names:

> library(readr) 
> read_csv("example.csv", col_names = c("name", "year_a", "ps"), col_types = cols(col_character(), col_character(), col_double())) 
# A tibble: 4 x 3 
    name year_a ps 
    <chr> <chr> <dbl> 
1  1  2 3.0 
2 test1 2017 35.5 
3 test2 2018 44.5 
4 test3 2019 22.0 

Donc, pour utiliser votre exemple variables, vous pouvez simplement faire:

library(readr) 
read_csv("example.csv", col_names = c(car_names, year_a, engine_power), col_types = cols(col_character(), col_character(), col_double())) 
+0

Merci votre réponse, pensez-vous qu'il existe une solution où l'ordre des colonnes n'est pas important? (le csv original a 30 colonnes) –

+0

Je ne suis pas vraiment sûr de comprendre votre question. L'ordre des colonnes dans votre appel à 'read_csv' est important car il doit correspondre à l'ordre des colonnes de votre fichier. Il n'y a aucun moyen que l'ordre des colonnes ne puisse avoir aucune signification, parce que le format de fichier csv donne l'ordre du sens des colonnes. La seule façon de savoir quelle colonne est par leur ordre. –