在R中的两个变量中找到NA

时间:2019-02-10 21:30:24

标签: r dplyr tidyverse na

我想通过a = list(range(5)) + [1] b = list(range(5)) + [1] c = list(range(5)) + [2] l = [a, b, c] list(filter(lambda x: x[-1] == 1, l)) # [[0, 1, 2, 3, 4, 1], [0, 1, 2, 3, 4, 1]] 函数在两个具有相同长度的向量中同时找到多个NA值:

count()

它不起作用。存在以下错误:

library(tidyverse)
list1 <-c(NA,NA,3)
list2 <-c(NA,3,4)
count(is.na(list1) & is.na(list2)) # wanna get TRUE 1 FALSE 2 as one only string contains NA values in both variables

但是,我在学习一本相当不错的书之前就做到了。

  Error in UseMethod("groups") : 
  no applicable method for 'groups' applied to an object of class "logical"

在这里有效。从某种类型的向量到逻辑向量(T或F)的转换似乎是一个问题,但是我无法弄清楚到底是什么。

2 个答案:

答案 0 :(得分:2)

您可以使用table()来建立is.na(list1) & is.na(list2)中每个逻辑值的计数的列联表:

table(is.na(list1) & is.na(list2))
# FALSE  TRUE 
#     2     1 

答案 1 :(得分:1)

看起来plyrdplyr都具有count()功能。 plyr版本基本上说它只是as.data.frame(table(x))的包装,而dplyr看起来像是期望tbl()作为输入。看来dplyr::count()是您在上面运行的内容。

我只在这里使用table(),或显式调用plyr::count()

library(tidyverse)
list1 <-c(NA,NA,3)
list2 <-c(NA,3,4)
as.data.frame(table(is.na(list1) & is.na(list2)))
#>    Var1 Freq
#> 1 FALSE    2
#> 2  TRUE    1
plyr::count(is.na(list1) & is.na(list2))
#>       x freq
#> 1 FALSE    2
#> 2  TRUE    1
dplyr::count(is.na(list1) & is.na(list2))
#> Error in UseMethod("groups"): no applicable method for 'groups' applied to an object of class "logical"

reprex package(v0.2.1)于2019-02-10创建