2013-05-07 10 views
6

Qualcuno sa come mantenere i nomi dei giocatori nella funzione rbind.fill.Mantieni i nomi delle righe quando usi rbind.fill in R

library(plyr) 

#creating data 
a <- mtcars[ 1:5 , c("mpg","hp","gear") ] 
b <- mtcars[ 6:10 , c("mpg","disp","gear") ] 

#does not work because there are different colnames 
rbind(a,b) 

#works but eliminates the rownames 
bound <- rbind.fill(a , b) 

Sto installando un ciclo in cui saranno collegati oggetti utilizzando rbind.fill. In questo momento sto usando la funzione di combinazione come questa:

namess <- c(rownames(a) , rownames(b)) 
rownames(bound) <- namess 

Ho pensato che potrebbe esserci un modo migliore. Grazie!

+0

Considererei questo un errore. Non so se 'plyr' ha un forum/luogo di segnalazione bug, ma se qualcuno dovesse collegarlo ad esso dovrebbe essere inviato imo. – eddi

+1

concordato @eddi :) l'ho appena inviato su github https://github.com/hadley/plyr/issues/156 –

+1

Plyr non supporta i nomi di riga. È un'idea migliore metterli in una variabile e poi gestirli esplicitamente. – hadley

risposta

0

Da quando ho postato questa domanda cinque anni fa, è stata resa disponibile una nuova funzione. smartbind risolve questo problema.

library(gtools) 

#creating data 
a <- mtcars[ 1:5 , c("mpg","hp","gear") ] 
b <- mtcars[ 6:10 , c("mpg","disp","gear") ] 

smartbind(a , b) 
2

Si potrebbe provare ad applicare una funzione personalizzata che esegue rbind.fill e imposta automaticamente rownames iniziali del genere:

# List of sample data 
ab.list <- list(a <- mtcars[1:5 , c("mpg","hp","gear")], 
       b <- mtcars[6:10 , c("mpg","disp","gear")]) 

# Apply custom function (rbind and rownames adjustment) to sample data 
do.call(function(...) { 

    tmp <- plyr::rbind.fill(...) 
    rownames(tmp) <- sapply(ab.list, function(i) { 
    rownames(i) 
    }) 

    return(tmp) 

}, ab.list) 

        mpg hp gear disp 
Mazda RX4   21.0 110 4 NA 
Mazda RX4 Wag  21.0 110 4 NA 
Datsun 710  22.8 93 4 NA 
Hornet 4 Drive 21.4 110 3 NA 
Hornet Sportabout 18.7 175 3 NA 
Valiant   18.1 NA 3 225.0 
Duster 360  14.3 NA 3 360.0 
Merc 240D   24.4 NA 4 146.7 
Merc 230   22.8 NA 4 140.8 
Merc 280   19.2 NA 4 167.6 

Partenza this previous post che si occupa di un problema simile.

+1

Probabilmente è meglio estrarre i nomi delle righe prima dall'interno della funzione analizzando gli argomenti in '...' piuttosto che tornare indietro nel frame principale per loro. – joran

+0

@joran, sentitevi liberi di modificare :-) – fdetsch

+0

In realtà sto avendo problemi a venire con un modo elegante di gestirlo sia passando 'ab.list' _and_' ab.list [[1]], ab.list [ [2]] 'separatamente. – joran

Problemi correlati