我有一个列列表,我们称它们为:ASSET,LIAB。
我想把它们都变成专栏。我正在使用R数据表,它向我发出警告,告诉我,当我以类似于在Python Pandas中使用的样式进行操作时,它已转换回字符(即完全无用): / p>
for (v in numeric_vars) {
ris_df[, eval(v)] <- as.numeric(gsub(',', '', ris_df[, eval(v)]))
}
列表numeric_vars
是变量的列表,目前是类似字符串的对象(例如1,000
),我希望将其转换为整数。
答案 0 :(得分:0)
首先,我认为您应该使用with=FALSE
来启用类似data.frame
的语法以在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