R 두 열의 완전한 사례 합계
문제
두 열의 완전한 사례 수를 어떻게 합산할 수 있나요?
와 함께 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()
처음 두 열 중:
sum(complete.cases(x[,1:2]))
#[1] 4
그리고 apply
두 개의 열에 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()
가장 일반적으로 사용되는 기능 중 하나입니다.
이 Shoudl은 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