根据缺失的变量数计算观察值

时间:2012-11-09 21:04:16

标签: r

我想根据丢失的变量数来计算数据帧的行数。因此,例如在下面的数据框中,我希望代码返回列表:

3, 5, 1, 1, 0

因为3行没有丢失变量,5行1缺少变量,1行有2个缺失变量,1行有3个缺失变量,0行有4个缺失变量:

   v1 v2 v3 v4
1   1  1  1  1
2  NA NA  1  1
3   1  1 NA  1
4   1  1  1  1
5  NA  1  1  1
6  NA  1  1  1
7   1  1  1 NA
8  NA  1  1  1
9   1  1  1  1
10  1 NA NA NA

以下是可以在R:

中加载的示例数据
dt <- structure(list(v1 = c(1, NA, 1, 1, NA, NA, 1, NA, 1, 1), v2 = c(1, NA, 1, 1, 1, 1, 1, 1, 1, NA), v3 = c(1, 1, NA, 1, 1, 1, 1, 1, 1, NA), v4 = c(1, 1, 1, 1, 1, 1, NA, 1, 1, NA)), .Names = c("v1", "v2", "v3", "v4"), row.names = c(NA, -10L), class = "data.frame")

我可以通过逐行循环遍历数据帧并递增计数器来获取缺失变量的数量,但是在大数据帧上它非常慢,所以我希望有一个灵巧的方法来做到这一点吗? / p>

2 个答案:

答案 0 :(得分:3)

table(rowSums(is.na(dt)))
#0 1 2 3 
#3 5 1 1 

如果你真的需要最后0(四NA s):

tabulate(factor(rowSums(is.na(dt))), nbins = ncol(dt)+1)
#[1] 3 5 1 1 0

答案 1 :(得分:0)

另一种潮汐式的方法是:

library(tidyverse)

dt <- structure(list(v1 = c(1, NA, 1 , 1, NA, NA, 1 , NA, 1, 1 ), 
                     v2 = c(1, NA, 1 , 1, 1 , 1 , 1 , 1 , 1, NA), 
                     v3 = c(1, 1 , NA, 1, 1 , 1 , 1 , 1 , 1, NA), 
                     v4 = c(1, 1 , 1 , 1, 1 ,  1, NA, 1 , 1, NA)
                     ),
                 .Names = c("v1", "v2", "v3", "v4"), row.names = c(NA, -10L), class = "data.frame")

dt <- as_tibble(dt)

使用drop_na(),使用tidyverse-y方法

dt %>% 
  drop_na()

使用“统计信息”包仅过滤“完整案例/行”

dt %>% 
  filter(complete.cases(v1, v2, v3, v4))

使用'na.omit'(不是tidyverse函数)

dt %>% 
  na.omit()