我正在使用Kaggle的《泰坦尼克号》资料。我正在尝试使用一个简单的函数查找每列中缺失值的数量。
使用以下代码,我能够找到每一列的缺失值数量:
length(which(is.na(titanic_data$PassengerId)))
length(which(is.na(titanic_data$Survived)))
length(which(is.na(titanic_data$Pclass)))
length(which(is.na(titanic_data$Name)))
length(which(is.na(titanic_data$Sex)))
length(which(is.na(titanic_data$Age)))
length(which(is.na(titanic_data$SibSp)))
length(which(is.na(titanic_data$Parch)))
length(which(is.na(titanic_data$Ticket)))
length(which(is.na(titanic_data$Fare)))
length(which(is.na(titanic_data$Cabin)))
length(which(is.na(titanic_data$Embarked)))
我不想为每一列重复代码。所以我写了以下函数:
missing_val<- function(x,y){
len <-length(which(is.na(x$y)))
len
}
#create a list of all column names
cols<- colnames(titanic_data)
cols
#call the function
missing_val(titanic_data,cols)
执行missing_val
函数时,当我知道Cabin和Embarked列中缺少值的事实时,我总是得到一个奇异的零。
我想要得到的是类似0,0,0,0,0,0,0,0,0,687,2的事实,表明Cabin列中缺少687个变量,而Embark列中缺少了2个事实。
我在这里做错了什么?任何提示将不胜感激。谢谢
答案 0 :(得分:4)
如果我没记错的话,sapply
不会被矢量化。可以直接使用colSums
和is.na
>>> colSums(is.na(titanic_train))
答案 1 :(得分:1)
您可以使用sapply
library(titanic)
data(titanic_train)
sapply(titanic_train, function(x) sum(is.na(x)))
PassengerId Survived Pclass Name Sex Age
0 0 0 0 0 177
SibSp Parch Ticket Fare Cabin Embarked
0 0 0 0 0 0