2013-10-11 13 views
24

miei dati è come questo (per esempio):Split/sottoinsieme A frame di dati da fattori in una colonna

ID Rate State 
1 24 AL 
2 35 MN 
3 46 FL 
4 34 AL 
5 78 MN 
6 99 FL 

dati:

structure(list(ID = 1:6, Rate = c(24L, 35L, 46L, 34L, 78L, 99L), 
       State = structure(c(1L, 3L, 2L, 1L, 3L, 2L), 
           .Label = c("AL","FL", "MN"), 
           class = "factor")), 
      .Names = c("ID", "Rate", "State"), 
      class = "data.frame", row.names = c(NA, -6L)) 

Voglio dividere i dati di stato e io desidera ottenere 3 set di dati come di seguito:

data set 1 
ID Rate State 
1 24 AL 
4 34 AL 
data set 2 
ID Rate State 
2 35 MN 
5 78 MN 
data set 3 
ID Rate State 
3 46 FL 
6 99 FL 

Quale funzione dovrei usare?

Stavo pensando alla funzione split o sottoinsieme, ma non ho ancora idea.

+8

Se pensi alla funzione 'split', perché non la provi? – juba

+0

Ciao! Si prega di cercare accuratamente una risposta prima di fare la tua domanda. Per favore leggi anche [this] (http://stackoverflow.com/help/on-topic): "Le domande che richiedono il codice devono dimostrare una comprensione minima del problema che si sta risolvendo. Includere soluzioni tentate, perché non hanno funzionato, e i risultati attesi. ". Detto questo, benvenuto in SO! Saluti. – Henrik

+6

In realtà ho provato la funzione split, ma quello che ho ottenuto è una lista. Non sono sicuro se sono sulla strada giusta o forse ci sono alcune funzioni che non conosco, è per questo che ho chiesto. Per favore, non considerarmi come se non ci facessi alcuno sforzo e basta buttare fuori la domanda all'inizio. Inoltre, i miei dati effettivamente sono molto più complicati dell'esempio, è relativamente difficile verificare se l'ho fatto correttamente. Apprezzo entrambi i tuoi commenti, ma un po 'più tolleranza ai principianti sarebbe apprezzato. – titi

risposta

42

Potremmo usare split:

mylist <- split(df, df$State) 

mylist 
$AL 
    ID Rate State 
1 1 24 AL 
4 4 34 AL 

$FL 
    ID Rate State 
3 3 46 FL 
6 6 99 FL 

$MN 
    ID Rate State 
2 2 35 MN 
5 5 78 MN 

Per accedere agli elementi numero:

mylist[[1]] 

o per nome:

mylist$AL 
    ID Rate State 
1 1 24 AL 
4 4 34 AL 

?split

Descrizione

scissione divide i dati nel vettore x nei gruppi definiti da f. I moduli sostitutivi sostituiscono i valori corrispondenti a tale divisione. unsplit inverte l'effetto di split.

+0

Questo mi aiuta grazie – cloudscomputes

Problemi correlati