r - 计算 dplyr 中列子集中的行计数

标签 r dplyr

我想使用 dplyr 跨列的子集逐行计算某些文本(或因子级别)的实例数。

这是输入:

> input_df
  num_col_1 num_col_2 text_col_1 text_col_2
1         1         4        yes        yes
2         2         5         no        yes
3         3         6         no       <NA>

这是所需的输出:
> output_df
  num_col_1 num_col_2 text_col_1 text_col_2 sum_yes
1         1         4        yes        yes       2
2         2         5         no        yes       1
3         3         6         no       <NA>       0

sum_yes我们已经计算了该行中"is"的数量。

我尝试了两种方法:

尝试的解决方案1:
text_cols = c("text_col_1","text_col_2")
df = input_df %>% mutate(sum_yes = rowSums( select(text_cols) == "yes" ), na.rm = TRUE)

错误:
Error in mutate_impl(.data, dots) : 
  Evaluation error: no applicable method for 'select_' applied to an object of class "character".

尝试的解决方案2:
text_cols = c("text_col_1","text_col_2")
df = input_df %>% select(text_cols) %>% rowsum("yes", na.rm = TRUE)

错误:
Error in rowsum.data.frame(., "yes", na.rm = TRUE) : 
  incorrect length for 'group'

最佳答案

  • 我们可以使用 mutate并为每行计算"is"的数量总和。
  • library(dplyr)    
    df %>%  mutate(sum_yes = rowSums(.[text_cols] == "yes"))
    
    #   num_col_1 num_col_2 text_col_1 text_col_2 sum_yes
    #*     <int>     <int> <fct>      <fct>        <int>
    #1         1         4 yes        yes              2
    #2         2         5 no         yes              1
    #3         3         6 no         <NA>             0
    
    灵感来自 this回答。
  • rowwisec_across :
  • df %>%
      rowwise() %>%
      mutate(sum_yes = sum(c_across(all_of(text_cols)) == "yes"))
    
  • dorowwise
  • df %>%
      rowwise() %>%
      do((.) %>% as.data.frame %>% 
      mutate(sum_yes = sum(.=="yes")))
    
  • 没有 dorowwise
  • df %>%
     select(text_cols) %>%
     mutate(sum_yes = rowSums(. == "yes")) 
    
  • 在基础 R 中,它实际上更简单
  • df$sum_yes <- rowSums(df[text_cols] == "yes")
    

    关于r - 计算 dplyr 中列子集中的行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783095/

    相关文章:

    r - 计算向量中负元素数量的优雅方法?

    r - 如何将值向量作为 mutate 的参数传递?

    r - 在R plotly subplot图中,如何只显示一个图例?

    mysql - 如何在两个表上进行选择,然后在 mySQL 中将它们连接起来

    R:如何在毫秒级别重新采样日期时间变量?

    r - 遍历 dplyr 中的列

    r - dplyr - 像 rowmeans() 一样使用 mutate()

    r - 无法更改 R 图中的 pch(点符号)。相关性

    r - 我需要帮助思考如何拆分数据框以执行操作

    r - 一键下载 R Shiny 的两个输出