使用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 %
答案 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