2017-04-03 4 views
0

Ich habe eine Spalte mit zwei Variablen, die Vorkommen von nach Datum zählen möchten.Äquivalent von zwei table() - Funktionen in dplyr

> testData 
    plan_type  date 
1 subscriber 2016-09-06 
2 subscriber 2017-01-19 
3 subscriber 2016-10-07 
4  PPU 2017-01-19 
5  PPU 2015-06-17 
6  PPU 2015-07-03 

Ich weiß, dass dies zum Beispiel durch subsetting in zwei verschiedenen Datenrahmen durchgeführt werden kann - eine mit nur subscriber und einem mit nur PPU Daten, dann table() verwenden und die beiden Datenrahmen zusammen zu binden. Aber ich würde gerne eine effizientere Lösung mit dplyr finden, die dies in einem Befehl tun kann.

Die Ausgabe sollte ungefähr so ​​aussehen, mit NA-Werten, für die keine Daten für eine der Variablen vorhanden sind.

> output 
     date subscriber PPU 
1 2015-06-17  <NA> 1 
2 2015-07-03  <NA> 1 
3 2016-09-06   1 <NA> 
4 2016-10-07   1 <NA> 
5 2017-01-19   1 1 

Gibt es eine spezielle Formel, die diese Funktion in dplyr durchführen würde?

+1

'reshape2 verwenden: : dcast (testDa ta, Datum ~ Plan_Typ, Länge) '. Siehe auch http://stackoverflow.com/questions/34417973/easy-way-to-convert-long-to-wide-format-with-counts/34418124 –

Antwort

1

Mit dplyr können Sie eine neue costant Spalten n erstellen und dann spread():

library(dplyr) 
library(tidyr) 

df %>% 
    mutate(n = 1) %>% 
    spread(plan_type, n) 

#>   date PPU subscriber 
#> 1 2015-06-17 1   NA 
#> 2 2015-07-03 1   NA 
#> 3 2016-09-06 NA   1 
#> 4 2016-10-07 NA   1 
#> 5 2017-01-19 1   1 

Daten:

df <- read.table(text = ' plan_type  date 
       1 subscriber 2016-09-06 
       2 subscriber 2017-01-19 
       3 subscriber 2016-10-07 
       4  PPU 2017-01-19 
       5  PPU 2015-06-17 
       6  PPU 2015-07-03', header = T) 
0

Mit data.table können wir dcast

library(data.table) 
dcast(setDT(df), date~plan_type, length) 
#   date PPU subscriber 
#1: 2015-06-17 1   0 
#2: 2015-07-03 1   0 
#3: 2016-09-06 0   1 
#4: 2016-10-07 0   1 
#5: 2017-01-19 1   1 
Verwandte Themen