我写了一个关于如何计算数据集中缺失百分比的R函数,它成功执行但是当我将函数应用于我的数据集时,没有输出,没有错误消息。我通过将df
替换为disease
来单独执行函数中每行代码,运行良好。发生了什么事?
> Missingss <- function(df){
+ len <- length(colnames(df))
+ n <- nrow(df)
+ name <- colnames(df)
+
+ for (i in 1:len) {
+ if (length(subset(is.na(df[,i]), is.na(df[,i]) == 1 )) == 0)
+ sprintf ('no missing for variable %s', name[i])
+
+ else
+ sprintf ('missing in %s, rate %1.2f', name[i], length(subset(is.na(df[,i]), is.na(df[,i]) == 1 ))/n)
+ }
+ }
> Missingss(disease)
>
数据集的潜行峰值
> head(disease)
Year Gender Age Disease Cases_in_1000s
1 1990 All 0-17 Asthma 182
2 1990 All 18-24 Asthma 23
答案 0 :(得分:2)
sprintf
只返回一个字符串。如果要输出,可以cat
此字符串。请注意,cat
不会生成换行符,因此您可能需要调整格式字符串以包含\n
。
Missingss <- function(df){
len <- length(colnames(df))
n <- nrow(df)
name <- colnames(df)
for (i in 1:len) {
nna <- length(which(is.na(df[,i])))
if (nna == 0)
cat(sprintf('No missing for variable %s\n', name[i]))
else
cat(sprintf('Missing in %s, rate %1.2f\n', name[i], nna/n))
}
}
关于计算NA
的另一个注意事项:您可以使用length(which(is.na(df[,i])))
代替,在可读性方面稍微好一些。
> test <- iris
> test$Sepal.Length[42] <- NA
> test$Species[1:50] <- NA
> test$Sepal.Width <- NA
> Missingss(test)
Missing in Sepal.Length, rate 0.01
Missing in Sepal.Width, rate 1.00
No missing for variable Petal.Length
No missing for variable Petal.Width
Missing in Species, rate 0.33
>