2017-07-04 3 views
0

importée du fichier texte. De nombreuses colonnes numériques sont importées en tant que "chr". Je suppose que c'est parce qu'ils contiennent un "," au lieu d'un ".". Mon but est d'écrire une boucle qui passe par les noms des colonnes désirées, remplace "," par "." et convertit les colonnes en "num". exemple Little:

data <- data.frame("A1" =c("2,1","2,1","2,1"), "A2" =c("1,3","1,3","1,3"), 
        stringsAsFactors = F) %>% as.tibble() #example data 
colname <- c("A1", "A2") #creating variable for loop 

for(i in colname) { 
    nam <- paste0("data$", i) 
    assign(nam, as.numeric(gsub(",",".", eval(parse(text = paste0("data$",i)))))) 
    } 

au lieu d'écraser la colonne existante, R crée une nouvelle variable:

data$A1 # that's the existing column as part of the tibble 
[1] "2,1" "2,1" "2,1" 
`data$A1` # thats just a new variable. mind the little`` 
[1] 2.1 2.1 2.1 

J'ai aussi essayé d'assigner (< -) les nouvelles valeurs numériques via eval, mais cela ne ne fonctionne pas non plus.

eval(parse(text = paste0("data$", i))) <- as.numeric(
gsub(",",".", eval(parse(text = paste0("data$",i))))) 

Error: target of assignment expands to non-language object 

Des suggestions sur la façon de transformer? J'ai le même problème avec d'autres colonnes que je veux agréger à une nouvelle variable. Cette variable devrait également faire partie de la structure existante. Je pourrais le faire à la main. Cela prendrait beaucoup de temps et produirait probablement beaucoup d'erreurs. Merci beaucoup! Sam

Répondre

0

Comme vous travaillez déjà avec le tidyverse, vous pouvez utiliser dplyr::mutate_at et vous avez déjà défini la variable colname.

data %>% 
    mutate_at(.vars = colname, 
      .funs = function(x) { as.numeric(gsub(",", ".", x)) })