r - 在 R 中按行计算 2 个值之间的 NA 数量

标签 r count row na

我的数据看起来像这样:

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 数量(第 1 行、第 2 行和第 2 行中的 3 和 7、7 和 6 以及 7 和 10 之间)分别为 3)。

有没有人有一个简单的解决方案?

谢谢!

最佳答案

试试这个:

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

关于r - 在 R 中按行计算 2 个值之间的 NA 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50793806/

相关文章:

r - 将行值除以 R data.frame 中的聚合总和

json - 如何仅在字符串的某些部分转义反斜杠 - R

r - 条件均值陈述

mysql - 仅计算两个不同列中的空值并显示在一个选择语句中

PHP 从一个 mysql 行的列中创建一个多维数组?

jQuery如何处理建表表单中的rowspan

python - 按特定顺序移动 pandas 数据框中的行

R在R 3.4.2 x64上安装rCharts

c++ - 计算特定单词在 C++ 文本文件中出现的次数

计算 C 中整数的个数