首页 > 解决方案 > 我正在尝试识别数据集行中缺失值的模式

问题描述

我正在尝试查找行中缺失值的模式。

例如,如果我有这个数据集:

        a   b    c    d
        1   0.1  NA   NA
        2   NA   3    4
        5   NA   6    NA

我希望输出是:

      n  a   b  c   d  m
      1  0   0  1   1  2
      1  0   1  0   0  1
      1  0   1  0   1  2

其中n列表示m列缺失值的行数,1表示缺失值(n列和m列除外)。即输出第一行的解释如下:1行缺失2个值用于变量 c 和 d;第二行:变量 b 中的 1 行缺少 1 个值,依此类推。

我曾尝试在 extracat 包(存档版本)中使用 subtable() 函数,但我无法在每个变量中找到缺失值的位置。我只能找到频率。

rowmiss<-rowSums(is.na(dat1[1:ncol(dat1)]))
r1<-matrix(rowmiss, nrow=nrow(dat1))
subtable(rowmiss,1)

我希望输出如上所示。到目前为止,我发现的是行中缺失值的频率,但我期望缺失值的模式和位置​​。

标签: r

解决方案


这是一个 tidyverse 方法。该n专栏似乎是多余的,它应该做其他事情吗?

library(tidyverse)
df %>%
  rowid_to_column() %>%
  gather(col, val, -rowid) %>%
  mutate(val = is.na(val) * 1) %>%
  group_by(rowid) %>% mutate(m = sum(val)) %>% ungroup() %>%
  spread(col, val) %>%
  mutate(n = 1) %>%
  select(n, a:d, m)

# A tibble: 3 x 6
      n     a     b     c     d     m
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     0     0     1     1     2
2     1     0     1     0     0     1
3     1     0     1     0     1     2

推荐阅读