r-转换列,使用循环通过$ name调用它们

时间:2017-07-04 14:26:15

标签: r loops character eval assign

从textfile导入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分配(&lt ;-)新数值,但这也不起作用。

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的一部分。我可以手工完成。这将花费大量时间并可能产生许多错误。 非常感谢! 萨姆

1 个答案:

答案 0 :(得分:0)

由于您已使用if(array[i].categories != null && array[i].categories.indexOf("Restaurant") != -1) { do something } ,因此可以使用tidyverse和已定义的dplyr::mutate_at变量。

colname