Подсчитать количество NA между 2 значениями по строке в R - PullRequest
0 голосов
/ 11 июня 2018

Мои данные выглядят примерно так:

db <- as.data.frame(matrix(ncol=10, nrow=3, 
                           c(3,NA,NA,4,5,NA,7,NA,NA,NA,NA,NA,7,NA,8,9,NA,NA,4,6,NA,NA,7,8,11,5,10,NA,NA,NA), byrow = TRUE))

db
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  3 NA NA  4  5 NA  7 NA NA  NA
2 NA NA  7 NA  8  9 NA NA  4   6
3 NA NA  7  8 11  5 10 NA NA  NA

Для каждой строки я пытаюсь подсчитать количество NA, которые появляются между первым и последним не-NA элементом (у меня есть цифры и символы) по строке .

Выходные данные должны быть примерно такими:

db$na.tot <- c(3, 3, 0)
db
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 na.tot
1  3 NA NA  4  5 NA  7 NA NA  NA      3
2 NA NA  7 NA  8  9 NA NA  4   6      3
3 NA NA  7  8 11  5 10 NA NA  NA      0

Где na.tot представляет количество NA, наблюдаемых между первым и последним не-NA элементами за строкой (между 3 и 7,7 и 6 и 7 и 10 в строках 1, 2 и 3 соответственно).

У кого-нибудь есть простое решение?

Спасибо!

1 Ответ

0 голосов
/ 11 июня 2018

Попробуйте это:

require(data.table)
z<-as.data.table(which(!is.na(db),arr.ind=TRUE))
setkey(z,row,col)
z[,list(NAs=last(col)-first(col)-.N+1),by=row]
#   row NAs
#1:   1   3
#2:   2   3
#3:   3   0
...