相关疑难解决方法(0)

在数据帧中成对计算有效观测数(无NA)

假设我有这样的数据框:

Df <- data.frame(
    V1 = c(1,2,3,NA,5),
    V2 = c(1,2,NA,4,5),
    V3 = c(NA,2,NA,4,NA)
)
Run Code Online (Sandbox Code Playgroud)

现在我想计算两个变量的每个组合的有效观察数.为此,我写了一个函数sharedcount:

sharedcount <- function(x,...){
    nx <- names(x)
    alln <- combn(nx,2)
    out <- apply(alln,2,
      function(y)sum(complete.cases(x[y]))
    )
    data.frame(t(alln),out)
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

> sharedcount(Df)
  X1 X2 out
1 V1 V2   3
2 V1 V3   1
3 V2 V3   2
Run Code Online (Sandbox Code Playgroud)

一切都很好,但功能本身在大数据帧上需要很长时间(600个变量和大约10000个观测值).我有一种感觉,我正在监督一种更简单的方法,特别是因为cor(...,use ='pairwise')运行起来要快得多,而且必须做类似的事情:

> require(rbenchmark)    
> benchmark(sharedcount(TestDf),cor(TestDf,use='pairwise'),
+     columns=c('test','elapsed','relative'),
+     replications=1
+ )
                           test elapsed relative
2 cor(TestDf, use = "pairwise")    0.25     1.0
1           sharedcount(TestDf)    1.90     7.6
Run Code Online (Sandbox Code Playgroud)

任何提示都表示赞赏.


注意:使用Vincent的技巧,我编写了一个返回相同数据框的函数.代码在我的答案中.

r missing-data dataframe

4
推荐指数
1
解决办法
9241
查看次数

标签 统计

dataframe ×1

missing-data ×1

r ×1