首页 > 解决方案 > 将列转换为数字,给定列列表

问题描述

我有一个列列表,我们称它们为:ASSET、LIAB。

我想把它们都变成列。我正在使用 R 数据表,当我以类似于我在 Python Pandas 中使用的风格进行操作时,它会向我发出警告,告诉我它已转换回字符(即完全无用):

for (v in numeric_vars) {
    ris_df[, eval(v)] <- as.numeric(gsub(',', '', ris_df[, eval(v)]))
}

该列表numeric_vars是变量的列表,目前是类似字符串的对象(例如1,000),我想将其转换为整数。

标签: r

解决方案


首先,我认为您应该使用 with=FALSEto enable data.frame-like 语法来处理data.table对象。

ris_df[, eval(v), with = FALSE] <- as.numeric(gsub(',', '', ris_df[, eval(v), with = FALSE]))

其次,检查输出的来源gsub(',', '', dt[, eval(v), with=F])

library(data.table)
test <- rep("1,000",10) 
dt <- data.table(test)
v <- "test"
dt[, v, with=FALSE] <- as.numeric(gsub(',', '', dt[, eval(v), with=F]))
> gsub(',', '', dt[, eval(v), with=F])
[1] "c(\"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\")"

如您所见,它只返回一个大字符串!这可能是一种data.table行为,因为它适用于data.frame对象

df <-data.frame(dt, stringsAsFactors = F)
> as.numeric(gsub(',', '',df[, eval(v)]))
 [1] 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000

推荐阅读