2017-11-21 2 views
0

Ich versuche eine R-Funktion zu finden, die die Funktionalität von "count" und "case when" in SQL implementieren kann. Ein einfaches Beispiel könnte wie folgt aussehen:R Äquivalent für die Anzahl (Fall wenn) Gruppe von in Sql

ich einen Datenrahmen haben

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 

ich die Ausgabe

rule Positive_flag  Negative_flag 
Strict 2     0 
Lenient 0     1 

ich im Grunde bin die Schaffung von zwei neuen Variablen auf der Grundlage der Anzahl der positiv sein wollen und negative Flagge.

Ich kann dies tun in SQL mit

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; 

Was die R äquivalente Funktion für dieses

Antwort

2

sein Was Sie suchen ist eine Tabelle, daher können Sie die table() Funktion


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 

Um die gewünschte Ausgabe zu erhalten:

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

Mit reshape2 die meistens verwendet wird, um lange aus breiten Daten zu konvertieren und umgekehrt.

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