r - 有没有办法在 R 中获得类似 COUNTIF 的摘要,同时也显示比例?

标签 r dplyr countif summarize

我正在尝试总结 R 中的变量,我的数据如下所示:

id  Function   V  t
1   adverb     0  1
2   discourse  1  1
3   filler     1  0
4   discourse  1  1
5   filler     0  0
6   adverb     1  1
7   adverb     1  1

我需要一个表格,其中按每个变量(存在/不存在)的计数和比例列出每个函数。

在 Excel 中,我会使用以下内容:COUNTIFS($B:$B, "adverb", $C:$C, ">"&0)/SUMIFS($B:$B, "adverb")

理想情况下它看起来像这样:

Function  V  V_prop  t  t_prop
adverb    2  0.67    3  1
discourse 2  1       2  1
filler    1  0.5     0  0

我知道我可以像这样使用 dplyr:

df %>% 
  group_by(Function) %>%
  dplyr::summarise_at(vars(V,t), function(x) (sum(x !=0)/n(x)))

但是,这只能给我原始计数,我还需要比例。

最佳答案

你们实际上非常接近。要获得比例,只需除以组中的项目数(使用 n() 而不是 n(x))。如果您向 _at 函数提供函数列表,它会将它们全部应用于所选的每个变量:

df %>% 
    group_by(Function) %>%
    summarise_at(vars(V,t),
                 list('n' = ~ sum(. !=0),
                      'prop' = ~ (sum(. !=0)/n())))

  Function    V_n   t_n V_prop t_prop
  <chr>     <int> <int>  <dbl>  <dbl>
1 adverb        2     3  0.667      1
2 discourse     2     2  1          1
3 filler        1     0  0.5        0

由于 dplyr 的工作方式,新变量必须有一个添加的名称(因此您无法立即获得 Vt,它们必须是 V_nt_n。如果您确实想要相同的格式,我们可以手动或使用 rename_at 重命名它们:

 ... %>%
    rename_at(vars(ends_with('_n')), ~ gsub('_n$', '', .))

关于r - 有没有办法在 R 中获得类似 COUNTIF 的摘要,同时也显示比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70851691/

相关文章:

r - 尝试在列表上应用函数 plyr::ldply 以转换为不同行数的 data.frame

r - 垂直计算多个列表的中位数

r - R中的组合因子水平

R:使用 "doparallel"、 "foreach"和 "purrr"库重写循环

Excel 在日期之间的范围内选择随机值

r - 在 R 中制作相关值的矩形矩阵,可能使用 corrplot

r - 用 knitr markdown 并排的两个 block

r - 为具有相同 'tidy' 格式和大小的不断变化的输入 csv 文件有效地创建 data.frames

excel - 如何根据多个值检查一个值是部分、完整还是无

excel - 计算单个单元格中的日期数