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

时间:2017-11-21 08:37:07

标签: r data-manipulation

我试图找到一个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等效函数是什么

1 个答案:

答案 0 :(得分:2)

您正在寻找的是一张桌子,因此您可以使用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