【发布时间】:2015-10-20 21:14:22
【问题描述】:
我正在尝试将多个数据表中的多个变量(每个数据表一个变量)从一个数字转换为一个因子。这是我到目前为止的代码(不工作):
DT = data.table(x=c(1,2,3,4), y = c(8,9,10,11), n = c(1,0,1,0))
DT
x y n
1: 1 8 a
2: 2 9 a
3: 3 10 b
4: 4 11 b
var_list = list("x","y")
lapply(var_list, function(i) {
name1 = paste("factor", i, sep="_")
DT[, num := seq_len(.N), by = "n"]
dataname = paste("DT",i,sep="_")
assign(dataname, data.frame(subset(DT,num==1)),pos = .GlobalEnv)
dataname = data.table(dataname)
dataname[, name1 := as.factor(get(i)), with = FALSE]
})
get(i) 中的错误:找不到对象“x”
我错过了什么?
【问题讨论】:
-
dataname是一个字符串,所以data.table(dataname)只是一个 data.table,其中一个字符串作为其唯一的数据点(观察/行和变量/列)。 -
您的代码对我来说似乎很模糊。你能显示所需的输出吗?在我看来,您只需要
var_list = c("x","y") ; DT[, (var_list) := lapply(.SD, factor), .SDcols = var_list] -
好的@Frank 给了我我需要的东西。谢谢!我将在下面发布解决方案。
-
@gannawag 很高兴您找到了解决方法,但您应该知道,正如大卫所说,可能有更直接的方法可以实现您的目标,
assign是代码的症状,它将创建以后麻烦你了。查看 data.table 小插曲可能是开始学习更好的替代方案的好方法:github.com/Rdatatable/data.table/wiki/Getting-started -
@Frank 谢谢,我去看看。
标签: r data.table lapply