r - 当其他值全为 0 时,计算特定值相对于所有值之和的百分比

标签 r dplyr

我有一个经过处理的问卷数据数据框。每列以二进制形式衡量一个特定的结构(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))

我曾想过使用nrowcount等,但它们没有na.rm的参数。

我想要的结果是:

qol1  qol2  qol3
37.5  11.11 42.85

非常感谢!

最佳答案

我们可以使用 is.nasum 来计算非 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/

相关文章:

R 图 - 如何向图中添加注释和描述?

r - 检查每个具有相同唯一 ID 的唯一值

r - 过滤 R 中的任何缺失值

r - ggplot : How to retrieve values for axis labels?

r - 将图像对象列表传递给 R magick 函数而不是向量

r - `read_fwf` 和 `vroom_fwf` 意外地跳过第一行?

r - 在 r 中安装旧版本的 dplyr (0.12)

R 从 str_split 获取最后一个元素

sql - dplyr 中是否可以使用 cut() 样式分箱?

R 按组识别数据帧更改模式