我想确定数据帧每列中缺失值的比例,由该数据帧中的不同组拆分.
我对R很新,所以到目前为止我还没有取得多大成功.这是一个测试它的示例数据集:
df <- data.frame(
programme = c('A','B','B','A','B','C','C','C','C','A'),
v1 = c(24,NA,NA,45,NA,23,22,23,45,23),
v2 = c(NA,1,1,NA,0,1,1,1,1,NA),
v3 = c(2,3,2,3,2,NA,NA,NA,NA,2))
Run Code Online (Sandbox Code Playgroud)
我考虑按组拆分数据帧,然后为每列应用一个函数,但这似乎不起作用
per_missing <- data.frame()
df %>%
group_by(programme)
per_missing <- apply(df, 2, function(col)sum(is.na(col))/length(col))
Run Code Online (Sandbox Code Playgroud)
理想情况下,该信息将写入新的数据帧,其中列出了每个组的每列的缺失率值.看起来像这样:
res <- data.frame(
variables = c('v1','v2','v3'),
A = c(0.0, 1, 0.0),
B = c(1, 0.0, 0.0),
C = c(0.0, 0.0, 1)
)
variables A B C
1 v1 0 1 0
2 v2 1 0 0
3 v3 0 0 1
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
按"程序"分组,获取mean其他列中的NA元素,gather"长"格式并spread返回"宽"格式
library(tidyverse)
df %>%
group_by(programme) %>%
summarise_all(funs(mean(is.na(.)))) %>%
gather(variables, val, -programme) %>%
spread(programme, val)
# A tibble: 3 x 4
# variables A B C
# <chr> <int> <int> <int>
#1 v1 0 1 0
#2 v2 1 0 0
#3 v3 0 0 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |