2015-01-16 13 views
7

Ho un dataframe di questo formato:Come posso dividere un dataframe in anni pari o dispari?

19620101 1 2 4 
    19630102 6 2 3 
    19640103 0 2 3 
    19650104 0 1 3 

voglio dividere e memorizzarlo in due variabili/dataframes a seconda che l'anno è pari o dispari.

Quindi, fondamentalmente, uno dataframe/variabile avrà anni pari

19620101 1 2 4 
    19640103 0 2 3 

Mentre un altro avranno anni dispari:

19630102 6 2 3 
    19650104 0 1 3 

Come posso fare questo?

risposta

7
> split(df, floor(df[[1]]/1e4) %% 2 == 0) 
$`FALSE` 
     V1 V2 V3 V4 
2 19630102 6 2 3 
4 19650104 0 1 3 

$`TRUE` 
     V1 V2 V3 V4 
1 19620101 1 2 4 
3 19640103 0 2 3 
4

Se l'esercizio viene memorizzato in quattro primi caratteri della prima colonna, poi

split(d,as.numeric(substr(d$V1,1,4))%%2==0) 

dove d è un data.frame:

> d 
     V1 V2 V3 V4 
1 19620101 1 2 4 
2 19630102 6 2 3 
3 19640103 0 2 3 
4 19650104 0 1 3 

> dput(d) 
structure(list(V1 = c(19620101L, 19630102L, 19640103L, 19650104L 
), V2 = c(1L, 6L, 0L, 0L), V3 = c(2L, 2L, 2L, 1L), V4 = c(4L, 
3L, 3L, 3L)), .Names = c("V1", "V2", "V3", "V4"), class = "data.frame", row.names = c(NA, 
-4L)) 
Problemi correlati