2014-05-13 5 views
6

Nel tradizionale plyr, restituite righe vengono aggiunte automagicamente all'uscita anche se superano il numero di righe di input per tale gruppo:Aggiunta righe in `uscita dplyr`

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 

non riesco a capire come fare la lo stesso in dplyr. Alcuni tentativi:

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. 

Come si fa?

Il caso d'uso specifico contro cui sto andando a capo è quello di dividere un campo di testo limitato e lo rende "lungo", ma io uso questa funzione di ddply per molti scopi.

risposta

7

Prova questa:

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

ottengo 'Errore: oggetto di tipo 'chiusura' non è subsettable'. Ma 'do (funzione (d) d [c (1,1,1,2),])%>% taRifx :: stack.list()' funziona .... –

+0

Installa l'ultimo dplyr da github. –

+0

Verificherò più tardi, grazie. Ho installato l'ultima versione rilasciata ma non la versione github. –