我有一个包含一些分类变量的大型数据表,其中缺失值已编码为空字符串。我想将它们重新编码为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中一个非常简单的过程,但我真的很难在文档,谷歌或这里找到任何结论!这是一个错误还是我错过了一些明显的东西?
答案 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("", "$"))