r- 转换列,使用循环按 $name 调用它们
r- transforming columns, calling them by $name, using a loop
从文本文件导入小标题。许多数字列被导入为 "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 的一部分。我可以用手做。这会花费很多时间并且可能会产生很多错误。
非常感谢!
山姆
因为您已经在使用 tidyverse
,您可以使用 dplyr::mutate_at
和您已经定义的 colname
变量。
data %>%
mutate_at(.vars = colname,
.funs = function(x) { as.numeric(gsub(",", ".", x)) })
从文本文件导入小标题。许多数字列被导入为 "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 的一部分。我可以用手做。这会花费很多时间并且可能会产生很多错误。 非常感谢! 山姆
因为您已经在使用 tidyverse
,您可以使用 dplyr::mutate_at
和您已经定义的 colname
变量。
data %>%
mutate_at(.vars = colname,
.funs = function(x) { as.numeric(gsub(",", ".", x)) })