我有一个带有因子变量的数据框和带有几个 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())
这是一个更通用的dplyr解决方案summarise_each,它将接受任意数量的列:
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\nRun Code Online (Sandbox Code Playgroud)\n