在NA计算后捕获为变量

时间:2017-01-11 19:39:46

标签: r dplyr

使用dplyr,tidyr,我想创建一个新变量,其中包含缺失值的计算值。

示例:

data <- data.frame (c1 = 1:8, c2 = factor (c("a", "b", "a", "c", "b", "c", "a", "b")))
data[4,1] <- data[6,2] <- NA 

我像这样计算NA的百分比,但我想用变异来捕获它。我似乎无法做到正确:

data %>%
  summarise_all(funs(mean(is.na(.))))

我可以这样做:

data2 <- data %>%
      summarise_all(funs(Mean = mean(is.na(.))))

但我更愿意拥有一个&#34;意思是&#34;柱。期望的输出将是:

Var Mean
c1  %
c2  %

4 个答案:

答案 0 :(得分:2)

你的意思是这样的:

data <- data.frame (c1 = 1:8, c2 = factor (c("a", "b", "a", "c", "b", "c", "a", "b")))
data[4,1] <- data[6,2] <- NA 

data
test<- data %>% summarise_all(funs(mean(is.na(.)))) %>% t() %>% as.data.frame()
names(test) <- "MeanNA"
test

给出:

   MeanNA
c1  0.125
c2  0.125

答案 1 :(得分:2)

在与Gregor讨论之后,我在尝试时聚集()工作:

data2 <- data %>%
  summarise_all(funs(Mean = mean(is.na(.)))) %>%
  gather(key, value)

as akaDrHouse指出:收集(Var,meanNA)来重命名最终的列。

答案 2 :(得分:0)

使用基础R的简单解决方案是

colMeans(is.na(data))
   c1    c2 
0.125 0.125 

生成一个命名向量。 is.na(data)生成一个逻辑矩阵,当元素为NA时,会观察到TRUE。 colMeans计算每列中TRUE元素的比例。

要将其放入data.frame,请使用

data.frame(Mean=colMeans(is.na(data)))
    Mean
c1 0.125
c2 0.125

答案 3 :(得分:0)

以下是\]

的选项
data.table