[英]Accessing columns in data.table using a character vector of column names
[英]Recoding data.table values in a loop using a vector of column names
我有一个包含一些分类变量的大数据表,其中缺失值已编码为空白字符串。 我想将它们重新编码为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中应该是一个非常简单的过程,但是我真的很难在文档,Google或此处找到任何结论性的东西! 这是一个错误还是我遗漏了一些明显的东西?
我们可以使用set
。 根据?set
,它非常快,因为避免了[.data.table
的开销
library(data.table)
for (v in categorical_variables){
set(myDataTable, i=which(myDataTable[[v]]==""), j=v, value=NA)
}
但是,在读取自身时可以避免这种情况,因为fread
具有na.strings
选项(就像read.csv/read.table
)。 我们可以将需要读取的字符指定为NA,即如果我们有""
和$
来读取为NA
,
myDataTable <- fread("yourfile.csv", na.strings=c("", "$"))
myDataTable <- data.table(v3=c(letters[1:3], ''),
v5 = 1:4, v7 = c('', '', letters[1:2]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.