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