我有一个经过处理的问卷数据数据框。每列以二进制形式衡量一个特定的结构(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
非常感谢!
最佳答案
我们可以使用 is.na
和 sum
来计算非 NA 值
library(dplyr)
df %>%
summarise_all(funs(sum(. == 1, na.rm = TRUE)/sum(!is.na(.))*100))
# qol1 qol2 qol3
#1 37.5 11.11111 42.85714
具有相同逻辑的基本 R 选项
colSums(df == 1, na.rm = TRUE)/colSums(!is.na(df)) * 100
# qol1 qol2 qol3
#37.50000 11.11111 42.85714
或者更简单,因为输入仅包含 1,0 和 NA
colMeans(df, na.rm = TRUE) * 100
# qol1 qol2 qol3
#37.50000 11.11111 42.85714
关于r - 当其他值全为 0 时,计算特定值相对于所有值之和的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073947/