Вопрос

Как я могу суммировать количество полных случаев в двух столбцах?

С 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))))
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top