2014-05-13 18 views
6

In der traditionellen plyr kehrte Reihen sogar automatisch mit dem Ausgang hinzugefügt werden, wenn sie die Anzahl der Eingabezeilen für diese Gruppierung nicht überschreiten:Hinzufügen von Zeilen in `dplyr` Ausgabe

set.seed(1) 
dat <- data.frame(x=runif(10),g=rep(letters[1:5],each=2)) 
> ddply(dat, .(g), function(df) df[c(1,1,1,2),]) 
      x g 
1 0.26550866 a 
2 0.26550866 a 
3 0.26550866 a 
4 0.37212390 a 
5 0.57285336 b 
6 0.57285336 b 
7 0.57285336 b 
8 0.90820779 b 
9 0.20168193 c 
10 0.20168193 c 
11 0.20168193 c 
12 0.89838968 c 
13 0.94467527 d 
14 0.94467527 d 
15 0.94467527 d 
16 0.66079779 d 
17 0.62911404 e 
18 0.62911404 e 
19 0.62911404 e 
20 0.06178627 e 

ich kann nicht herausfinden, wie das zu tun gleich in dplyr. Einige Versuche:

dat %>% group_by(g) %>% summarise(xbar = mean(x)) 

> dat %>% group_by(g) %>% summarise(xbar = runif(3)) 
Error: expecting a single value 

# Getting creative... 

> dat %>% group_by(g) %>% function(x) x[c(1,1,1,2),] 

# Nope. 

Wie mache ich das?

Der spezifische Anwendungsfall, gegen den ich mich stoße, ist die Aufspaltung eines \n -begrenzten Textfeldes und das "Lang", aber ich nutze diese Funktion von ddply ständig für viele Zwecke.

Antwort

7

Versuchen Sie folgendes:

dat %>% 
    group_by(g) %>% 
    do(.[c(1,1,1,2), ]) %>% 
    ungroup() 
+0

ich 'Fehler: Objekt vom Typ 'Schließung' subsettable' nicht. Aber 'do (Funktion (d) d [c (1,1,1,2),])%>% taRifx :: stack.list()' funktioniert .... –

+0

Installiere das neueste dplyr von github. –

+0

Wird später überprüfen, danke. Ich habe die neueste veröffentlichte Version installiert, aber nicht die Github-Version. –