在将结果与apply进行比较时,我遇到了dapply函数的问题。 这是我的程序,该程序的目标是在我的数据集中找到na的百分比
创建随机数据集的代码:
td <- matrix(rep(rnorm(200,2,6),100),2000,100)
td[sample(1:2000,100),sample(1:100,20)] <- NA
colnames(td) <- paste0("V",1:100)
td <- data.frame(td)
用于查找向量/变量中na值的百分比:
na.pct <- function(v) (sum(is.na(v)*1)*100)/length(v)
使用ddply:
require(plyr)
daply(td,.(colnames(td)),na.pct)
使用基础应用功能:
apply(td,2,na.pct)
当我比较结果时,它们不匹配。我想知道daply函数出了什么问题
请帮我解决这个问题。
由于
答案 0 :(得分:0)
尝试:
na.pct1 <- function(v) (sum(is.na(v))*100)/nrow(v)
na.pct <- function(v) (sum(is.na(v))*100)/length(v)
res2 <-apply(td,2,na.pct)
library(reshape2)
res1 <- daply(melt(td), .(variable), na.pct1)
identical(res1,res2)
#[1] TRUE
您可以检查输出的差异:
daply(td, .(colnames(td)), function(x) length(x))[1:5]
# V1 V10 V100 V11 V12 ##here it is giving the `ncol`
#100 100 100 100 100
apply(td, 2, length)[1:5]
# V1 V2 V3 V4 V5
#2000 2000 2000 2000 2000