过滤R中的csv:未使用的参数(.SDcols = variable)

时间:2017-02-07 06:22:23

标签: r

我在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)

1 个答案:

答案 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))]

使用.SDcolssum

查找is.na中提到的列中的NA元素数
train[, lapply(SD, function(x) sum(is.na(x))), .SDcols = cat_var]