按变量分组,然后查找 R 中每列缺失值的比例

Ric*_*cky 1 r dplyr tidyverse

我有一个带有因子变量的数据框和带有几个 NA 的列,如图所示。

var col1 col2 col3
C    1    NA   1
A    NA   1    1 
C    NA   NA   NA
A    1    NA   1
B    NA   1    1
A    1    1    1
B    1    NA   1
B    1    1    1
C    NA   NA   1
B    NA   1   1
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种对变量进行分组并获取每列缺失值的比例的方法,并按“var”中的级别进行分组。输出应如下所示:

var col1 col2 col3
A    0.33 0.33  0
B    0.5  0.25  0 
C    0.66 1.00  0.33
Run Code Online (Sandbox Code Playgroud)

任何方法都可以,并且会赞赏不同的方法,但首选简单的 dplyr 方法。谢谢!

编辑:我正在寻找一种方法,该方法允许我一次对多个列执行此操作,并返回与我上面显示的数据框类似的数据框。

假设我的数据名为“df”,那么我想立即获取所有列的缺失比例,而不必再次手动输入名称。

以下代码不起作用,但它是我想要实现的目标的总体思路。也许一个函数可以提供帮助,但我不确定如何处理它。

df %>% group_by(var) %>% summarise(names(df[,-1]) = sum(is.na(names(df[,-1])))/n())

Pie*_*nte 5

这是一个更通用的dplyr解决方案summarise_each,它将接受任意数量的列:

\n\n
df1 <-read.table(text="var col1 col2 col3\nC    1    NA   1\nA    NA   1    1\nC    NA   NA   NA\nA    1    NA   1\nB    NA   1    1\nA    1    1    1\nB    1    NA   1\nB    1    1    1\nC    NA   NA   1\nB    NA   1   1",header=TRUE, stringsAsFactors=FALSE)\n\nlibrary(dplyr)\ndf1 %>%\ngroup_by(var) %>%\nsummarise_each(funs(sum(is.na(.))/length(.)))\n\n# A tibble: 3 \xc3\x97 4\n    var      col1      col2      col3\n  <chr>     <dbl>     <dbl>     <dbl>\n1     A 0.3333333 0.3333333 0.0000000\n2     B 0.5000000 0.2500000 0.0000000\n3     C 0.6666667 1.0000000 0.3333333\n
Run Code Online (Sandbox Code Playgroud)\n