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()
هي واحدة من الوظائف الأكثر استخداما.
يجب أن يعمل هذا لكليهما 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))))
}