gpt4 book ai didi

r - 在数据帧中成对计算有效观测值的数量(无NA)

转载 作者:行者123 更新时间:2023-12-04 22:15:14 25 4
gpt4 key购买 nike

假设我有一个像这样的数据框:

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

现在,我想计算两个变量的每种组合的有效观测值的数量。为此,我编写了一个函数 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)
}

这给出了输出:
> sharedcount(Df)
X1 X2 out
1 V1 V2 3
2 V1 V3 1
3 V2 V3 2

一切都很好,但是函数本身在大型数据帧(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

任何提示,不胜感激。

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

最佳答案

以下是稍快的:

x <- !is.na(Df)
t(x) %*% x

# test elapsed relative
# cor(Df) 12.345 1.000000
# t(x) %*% x 20.736 1.679708

关于r - 在数据帧中成对计算有效观测值的数量(无NA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com