使用列名称向量在循环中重新编码data.table值

时间:2016-03-12 22:16:56

标签: r data.table

我有一个包含一些分类变量的大型数据表,其中缺失值已编码为空字符串。我想将它们重新编码为NA。

我有一个存储分类变量名称的向量:

categorical_variables = c("v3", etc.

向量肯定是正确设置的 - 我已成功使用它来遍历每列的图。但是当我尝试使用这个重新编码时......

for (v in categorical_variables) myDataTable[get(v)=="",get(v):=NA]

...我收到以下错误:

 Error in get(v) : object 'v3' not found

然而这可行:

myDataTable[v3=="",v3:=NA]

这也行得正常:

myDataTable[get("v3")=="",get("v3")]

所以当我尝试使用get()结合以下命令进行赋值时:=它会引发错误。我做错了什么?

data.table非常大(因此我更喜欢使用data.table),所以理想情况下我不想转换为data.frame并使用基本R方法。我觉得这应该是data.table中一个非常简单的过程,但我真的很难在文档,谷歌或这里找到任何结论!这是一个错误还是我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:2)

我们可以使用set。根据{{​​1}},由于避免了?set的开销,因此速度非常快

[.data.table

但是,这可以在阅读时自行避免,因为library(data.table) for (v in categorical_variables){ set(myDataTable, i=which(myDataTable[[v]]==""), j=v, value=NA) } 具有fread选项(就像na.strings)。我们可以将需要读取的字符指定为NA,即如果我们将read.csv/read.table""读为$

NA

数据

myDataTable <- fread("yourfile.csv", na.strings=c("", "$"))