我在R version 3.2.1
上使用OS X Yosemite (Version 10.10.4)
。
使用以下方式阅读CSV文件:
> train = read.csv("~/Downloads/train.csv", header = TRUE)
然后初始化变量:
> cat_var <- names(train)[which(sapply(train, is.character))]
> cat_var <- c(cat_var, 'BedroomAbvGr', 'HalfBath', ' KitchenAbvGr','BsmtFullBath', 'BsmtHalfBath', 'MSSubClass')
现在我想在cat_var
列中找到总空值,但收到以下错误:
> colSums(sapply(train[,.SD, .SDcols=cat_var], is.na))
Error in `[.data.frame`(train, , .SD, .SDcols = cat_var) :
unused argument (.SDcols = cat_var)
答案 0 :(得分:3)
要查找NULL值(假设它是NA
),data.table
方法首先将'data.frame'转换为data.table
。这可以使用setDT
library(data.table)
setDT(train)
从OP的代码来看,目前尚不清楚转换为data.table
是否发生。例如
mtcars1 <- copy(mtcars)
mtcars1[, lapply(.SD, sum), .SDcols = 1:2]
[.data.frame
中的错误(mtcars1 ,, lapply(.SD,sum),。SDcols = 1:2):
未使用的参数(.SDcols = 1:2)
返回错误,因为它是data.frame
,但是
setDT(mtcars1)[, lapply(.SD, sum), .SDcols = 1:2]
# mpg cyl
#1: 642.9 198
关于具体问题,我们可以使用fread
直接读取文件到data.table
train <- fread("~/Downloads/train.csv")
cat_var <- names(train)[unlist(lapply(train, is.character))]
使用.SDcols
和sum
is.na
中提到的列中的NA元素数
train[, lapply(SD, function(x) sum(is.na(x))), .SDcols = cat_var]