【发布时间】:2020-02-06 21:02:48
【问题描述】:
我正在 R 中进行数据清理。有多个变量被编码为我想转换为数字的 char 变量。它们是美元金额,因此在我加载 CSV 时被定义为 char 变量 - 例如,我需要将 $123,456 转换为 123456。
要一次执行一个变量,我可以使用以下代码,它可以正常工作:
data2<-data
data2$'FY 2011' <- parse_number(data$'FY 2011')
但是,我想遍历数据框中需要转换的所有变量。这些变量并非彼此相邻。我尝试使用for循环,如下:
#Duplicate dataset
data2<-data
#Define the variable names to loop over
x<-c('FY 2011', 'FY 2012', 'FY 2013', 'FY 2014')
#loop over the variable names, putting the converted values into the new dataset
for (var in x) {
data2$var <- parse_number(data$var)
}
但是,这不起作用,给我错误“parse_vector(x, col_number(), na = na, locale = locale, trim_ws = trim_ws) 中的错误: is.character(x) 不是 TRUE 另外:警告信息: 未知或未初始化的列:'var'。 "
我认为这是因为我没有以正确的格式将变量名放入循环中。但是,我无法弄清楚正确的格式。我知道有一些方法可以使用 lapply 将函数应用于多个变量,但我无法找到一种方法来使用它来将输出放入具有相同变量名称的新数据集中。 (我习惯使用 Stata,我发现在其中实现这种 for 循环来循环变量名非常容易。)
非常感谢您的帮助!
【问题讨论】:
-
替换
$。与[[即data2[[var]] <- parse_number(data[[var]]) -
data2[var] <- lapply(data2[var], parse_number)是没有循环的单行。 -
你能发一个minimal reproducible example吗?