2017-07-04 47 views
0

导入tibble。许多数字列被导入为“chr”。我想这是因为它们包含“,”而不是“。”。 我的目标是编写一个循环遍历所需列的名称,用“。”替换“,”。并将列转换为“num”。 小例如:

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)))))) 
    } 

代替覆盖现有柱,R创建一个新的变量:

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 

我也试图分配(< - )通过EVAL新数值,但也不不工作。

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

Error: target of assignment expands to non-language object 

有关如何转换的任何建议?我想与其他列汇总为新变量的问题相同。这个变量也应该是现有的tibble的一部分。我可以亲手做。这需要很多时间,可能会产生很多错误。 非常感谢! 山姆

回答

0

正如你已经与tidyverse工作,你可以使用dplyr::mutate_at并且您已经定义的变量colname

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