如果模式包括 NA,如何在 R 中计算模式出现次数

  • 本文关键字:模式 计算 NA 包括 如果 r
  • 更新时间 :
  • 英文 :


我有一串0,1和NA,如下所示:

string<-c(0,1,1,0,1,1,NA,1,1,0,1,1,NA,1,0,
          0,1,0,1,1,1,NA,1,0,1,NA,1,NA,1,0,1,0,NA,1)

我想计算模式"1-NA-1"发生的次数。 在这种情况下,我想得到计数 5。

我已经尝试了表(字符串),并试图复制它,但似乎没有任何效果。我将感谢任何人的帮助!

# some ugly code, but it seems to work
sum( head(string, -2) == 1 & is.na(head(string[-1],-1)) 
                           & string[-1:-2] == 1, na.rm = TRUE)

像这样:

x <- which(is.na(string))
x <- x[!x %in% c(1,length(string))]
length(x[string[x-1] & string[x+1]])
# [1] 5

--推理--

首先,我们检查string的哪些值是用is.na(string) NA的。然后我们找到那些带有which的索引并将它们存储在 x .

正如@Rick提到的,如果第一个/最后一个值NA则会导致我们下一步出现问题。因此,我们确保删除这些内容(因为它无论如何都不应该计算在内)。

接下来,我们要找到string[x-1]string[x+1]1的情况。换句话说,1 & 1.请注意,FALSETRUE可以分别评估为01。因此,如果您键入1 == TRUE,您将获得TRUE。如果您键入1 & 1,您也会得到TRUE。因此,当两者都1时,string[x-1] & string[x+1]将返回TRUE,否则FALSE。我们基本上得到一个逻辑向量,并用该向量进行子集x,以获得满足我们搜索的x中的所有位置。然后我们使用length来确定有多少。

最新更新