R 2 つの列の完全なケースを合計する
質問
2 つの列の完全なケースの数を合計するにはどうすればよいですか?
と c
に等しい:
a b
[1,] NA NA
[2,] 1 1
[3,] 1 1
[4,] NA 1
のようなものを適用すると、
rollapply(c, 2, function(x) sum(complete.cases(x)),fill=NA)
単一の番号を返したいのですが、 2
この場合。これは多くの列を持つ大規模なデータセット用なので、使用したいと思います rollapply
単に実行するのではなく、セット全体にわたって sum(complete.cases(a,b))
.
考えすぎでしょうか?
ありがとう!
解決
rollapply
を使用して、隣接するマトリックス列の完全なケース数をこのように計算できます。
m <- matrix(c(NA,1,1,NA,1,1,1,1),ncol=4)
# [,1] [,2] [,3] [,4]
#[1,] NA 1 1 1
#[2,] 1 NA 1 1
library(zoo)
rowSums(rollapply(is.na(t(m)), 2, function(x) !any(x)))
#[1] 0 1 2
. 他のヒント
試しましたか sum(complete.cases(x))
?!
set.seed(123)
x <- matrix( sample( c(NA,1:5) , 15 , TRUE ) , 5 )
# [,1] [,2] [,3]
#[1,] 1 NA 5
#[2,] 4 3 2
#[3,] 2 5 4
#[4,] 5 3 3
#[5,] 5 2 NA
sum(complete.cases(x))
#[1] 3
を見つけるには、 complete.cases()
最初の 2 つの列のうち:
sum(complete.cases(x[,1:2]))
#[1] 4
そして、へ apply
の 2 列に matrix
マトリックス全体でこれを行うことができます。
# Bigger data for example
set.seed(123)
x <- matrix( sample( c(NA,1:5) , 50 , TRUE ) , 5 )
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,] 1 NA 5 5 5 4 5 2 NA NA
#[2,] 4 3 2 1 4 3 5 4 2 1
#[3,] 2 5 4 NA 3 3 4 1 2 2
#[4,] 5 3 3 1 5 1 4 1 2 1
#[5,] 5 2 NA 5 3 NA NA 1 NA 5
# Column indices
id <- seq( 1 , ncol(x) , by = 2 )
[1] 1 3 5 7 9
apply( cbind(id,id+1) , 1 , function(i) sum(complete.cases(x[,c(i)])) )
[1] 4 3 4 4 3
complete.cases()
全体にわたって行単位で動作します data.frame
または matrix
戻る TRUE
データが欠落していない行の場合。マイナーな話はさておき、 "c"
は不適切な変数名です。 c()
は最もよく使用される関数の 1 つです。
matrix
とdata.frame
> sum(apply(c, 1, function(x)all(!is.na(x))))
[1] 2
.
、あなたは単に大きな行列M
for (i in 1:(ncol(M)-1) ){
c <- M[,c(i,i+1]
agreement <- sum(apply(c, 1, function(x)all(!is.na(x))))
}
. 所属していません StackOverflow