R 等价于 sql 中的 count(case when) group by

R equivalent for count(case when) group by in sql

我试图找到一个 R 函数,它可以在 sql 中实现 "count" 和 "case when" 的功能。简单的例子如下:

我有一个数据框

df <- data.frame(flag=c("pos","neg","pos"),rule=c("Strict","Lenient","Strict"))

> df
  flag    rule
1  pos  Strict
2  neg Lenient
3  pos  Strict

我希望输出为

rule    Positive_flag     Negative_flag
Strict   2                  0
Lenient  0                  1

我基本上是根据正负标志的计数创建两个新变量。

我可以在 sql 中使用

select sum(case when flag = "pos" then 1 else 0 end) as Positive_flag, sum(case when flag = "neg" then 1 else 0 end) as Negative_flag group by rule;

这个的 R 等效函数是什么

你要找的是table的,因此,你可以使用table()函数


df <- data.frame(flag = c("pos", "neg", "pos"),
                 rule = c("Strict", "Lenient", "Strict"))

table_df <- table(df)
table_df
#>      rule
#> flag  Lenient Strict
#>   neg       1      0
#>   pos       0      2

要获得所需的输出:

t(table_df)
#>          flag
#> rule      neg pos
#>   Lenient   1   0
#>   Strict    0   2

使用 reshape2 主要用于将数据从宽数据转换为长数据,反之亦然。

reshape2::dcast(df, rule~flag, value.var = "rule", fun.aggregate = length)
#>      rule neg pos
#> 1 Lenient   1   0
#> 2  Strict   0   2