【问题标题】:use %in% in operator with select in R在运算符中使用 %in% 和 R 中的选择
【发布时间】:2020-09-22 13:45:01
【问题描述】:

我有一个数据集,我想计算某些列的每个参与者的参与率(非 NA 的数量/总列)。实际数据集有很多我想忽略的列。

为此,假设我只想知道项目和分数列(5 列)中的参与率,而忽略名称和电子邮件列。此代码有效:

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 运算符,这样我就可以避免复制和粘贴相同的列以多次排除?

谢谢!

【问题讨论】:

    标签: r select dplyr rowsum in-operator


    【解决方案1】:

    我们可以在select中使用-

    library(dplyr)
    data %>% 
      mutate(part_rate = rowSums(!is.na(select(., -columns_to_exclude)))/5 * 100)
    

    【讨论】:

    • 我不敢相信它这么简单——谢谢@akrun!我会在 10 分钟内接受答案,当时间滞后的时候让我。
    猜你喜欢
    • 2022-10-18
    • 1970-01-01
    • 2022-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2014-07-21
    相关资源
    最近更新 更多