r - 如何将 NA 从 R 中的 summarise(count = n()) 函数中删除?
问题描述
我有一个数据集,其中包含 4 个组织单位 (org_unit),参与者人数不同,2 个问题 (Q1,Q2) 为 2 度 (1:2)。我想知道每个单位有多少人用 [1] 回答了相应的问题,并将他们除以参与者/单位的总数。
Org_unit <- c(1,1,1,1,2,2,2,3,3,4)
Q1 <- c(1,2,1,2,1,2,1,2,1,2)
Q2 <- c(-9,-9,-9,-9,-9,-9,-9,-9,-9,-9)
问题是,我的 Q2 仅包含 [-9] 代表无响应。因此,我将 NA 分配给 [-9]。
DF <- data.frame(Org_unit, Q1, Q2)
DF[DF == -9] <- NA
DF
Org_unit Q1 Q2
1 1 1 NA
2 1 2 NA
3 1 1 NA
4 1 2 NA
5 2 1 NA
6 2 2 NA
7 2 1 NA
8 3 2 NA
9 3 1 NA
10 4 2 NA
接下来我计算了用 [1] 回答 Q1 的人的比例,结果很好。
prop_q1 <- DF %>%
group_by(Org_unit) %>%
summarise(count = n(),
prop = mean(Q1 == 1))
prop_q1
# A tibble: 4 x 3
Org_unit count prop
<dbl> <int> <dbl>
1 1 4 0.5
2 2 3 0.667
3 3 2 0.5
4 4 1 0
但是,当我为 Q2 运行相同的代码时,每个单元的成员数量相同(计数 = c(1,2,3,4),尽管没有人回答这个问题,我不希望他们注册为参与者,因为他们在技术上没有参与这项研究。
prop_q2 <- DF %>%
group_by(Org_unit) %>%
summarise(count = n(),
prop = mean(Q2 == 1))
prop_q2
# A tibble: 4 x 3
Org_unit count prop
<dbl> <int> <dbl>
1 1 4 NA
2 2 3 NA
3 3 2 NA
4 4 1 NA
面对 NA 时,有没有办法计算每个单位的正确成员数量?[-9] 谢谢!
解决方案
鉴于您想跨多个列执行此操作,我认为across()
在dplyr
动词中使用对您来说会更好。我在下面解释解决方案。
Org_unit <- c(1,1,1,1,2,2,2,3,3,4)
Q1 <- c(1,2,1,2,1,2,1,2,1,2)
Q2 <- c(1,-9,-9,-9,-9,-9,-9,-9,-9,-9) #Note one response
df <- tibble(Org_unit, Q1, Q2)
df %>%
mutate(across(starts_with("Q"), ~na_if(., -9))) %>%
group_by(Org_unit) %>%
summarize(across(starts_with("Q"),
list(
N = ~sum(!is.na(.)),
prop = ~sum(. == 1, na.rm = TRUE)/sum(!is.na(.)))
))
# A tibble: 4 x 5
Org_unit Q1_N Q1_prop Q2_N Q2_prop
* <dbl> <int> <dbl> <int> <dbl>
1 1 4 0.5 1 1
2 2 3 0.667 0 NaN
3 3 2 0.5 0 NaN
4 4 1 0 0 NaN
首先,我们采用数据框(我创建为 tibble)并替换以大写“Q”开头的所有列NA
的所有值。-9
这会将所有问题列转换为以NA
s 代替-9
s。
其次,我们按组织单元分组,然后使用两个函数进行汇总。第一个对问题的回答不是 NA 的所有值求和。该字符串_N
将附加到具有这些值的列。第二个计算比例并将_prop
附加到值。
推荐阅读
- javascript - Golang/ReactJS CORS 问题
- angular - 如何使用 Angular 9 构建 Electron 9 应用程序?
- php - 如何将拆分数组 $input 分离回 php 中的 2 个单独的值
- javascript - 如何使用 html css 和 javascript 使图像跟随光标
- python - 绘制堆积条形图
- flutter - 将项目列表添加到对象列表
- ios - 如何允许我的应用在所有 IOS 设备上可用
- r - 安排ggplots并为他们使用一个commom图例
- python - numpy.AxisError:来源:轴 2 超出维度 2 数组的范围
- python - 在文件中附加一行,然后不久将其删除