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

Is there a way to get a COUNTIF like summary in R that also shows proportions?

我试图在 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

我需要的是一个 table,它按每个变量的计数和比例列出每个函数 (present/non-present)。

我 Excel 我会使用类似的东西:COUNTIFS($B:$B, "adverb", $C:$C, ">"&0)/SUMIFS($B:$B, "副词")

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

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$', '', .))