r - 在运算符中使用 %in% 和 R 中的选择
问题描述
我有一个数据集,我想计算某些列的每个参与者的参与率(非 NA 的数量/总列)。实际数据集有很多我想忽略的列。
为此,假设我只想知道 item 和 score 列(5 列)中的参与率,而忽略 name 和 email 列。此代码有效:
library(tidyverse)
data <- tibble(name = c("Corey", "Sibley", "Justin"),
item_1 = c(1, 2, NA),
item_2 = c(1, NA, NA),
item_3 = c(2, NA, NA),
item_4 = c(3, 2, NA),
score = c(NA,NA, 1),
email = c("on file", "on file", "on file"))
data %>%
mutate(part_rate = rowSums(!is.na(select(., -c(name, email))))/5 * 100)
但是,在真实的数据集中,我对不同的参与者有不同的分母(5),所以我想列出要排除/包含的列一次。我试过这个,但它不起作用:
columns_to_exclude <- c("email", "name")
data %>%
mutate(part_rate = rowSums(!is.na(select(., !%in% columns_to_exclude)))/5 * 100)
有什么办法可以让我们在这个选择中使用 in 运算符,这样我就可以避免复制和粘贴相同的列来排除多次?
谢谢!
解决方案
我们可以-
在select
library(dplyr)
data %>%
mutate(part_rate = rowSums(!is.na(select(., -columns_to_exclude)))/5 * 100)
推荐阅读
- python - redis // redis-hash 在传递 512 个哈希条目后被破坏
- python - 将数组扩展为给定长度的连续切片的 Numpy 操作?
- sql-server - ',' 附近的语法不正确,使用 TOP
- python - 我如何在 Python 中使用 Pyplot 函数?
- rabbitmq - Pika:如何从回调函数中获取返回值?
- python - 如何保存 for 循环?
- ruby-on-rails - 为什么对布局 application.html.erb 视图的更改未显示在新的 Rails 6 应用程序上
- c - 关于为要与 fread 一起使用的 char* 分配内存的 C 问题
- c# - Unity Destroy 和其他代码不起作用?
- python - 无法使用 conda 安装 mpi4py 并指定预安装的 mpicc 路径