【发布时间】:2018-08-30 09:18:15
【问题描述】:
我有一个经过处理的问卷数据数据框。每列以二进制形式衡量一个特定的构造(1 表示是;0 表示否;NA 是空白)。
数据框示例如下:
df <- data.frame(qol1 = c(1, 0, 0, 1, NA, 0, 0, 1, NA, 0),
qol2 = c(0, 0, 0, 0, NA, 1, 0, 0, 0, 0),
qol3 = c(1, 0, NA, NA, NA, 0, 0, 0, 1, 1))
df
qol1 qol2 qol3
1 1 0 1
2 0 0 0
3 0 0 NA
4 1 0 NA
5 NA NA NA
6 0 1 0
7 0 0 0
8 1 0 0
9 NA 0 1
10 0 0 1
我想计算每列的 1 与 1 和 0 总数(忽略 NA)的百分比。
我尝试使用下面的代码,但它没有得到正确的答案,因为任何加 0 都会得到相同的数字:
library(dplyr)
df2 <- df %>%
summarise_all(funs(sum(. == 1, na.rm = TRUE)/sum(., na.rm = TRUE)*100))
我曾想过使用nrow、count 等,但他们没有为 na.rm 提供参数。
我想要的结果是:
qol1 qol2 qol3
37.5 11.11 42.85
谢谢,非常感谢!
【问题讨论】:
-
试试
df %>% summarise_all(~sum(.==1, na.rm = T)/sum(.<=1, na.rm = T))。您在分母中使用sum(., na.rm = TRUE),它只是添加1s,而您实际上需要计算1s 和0s。