2015-01-16 16 views
7

Mam dataframe tego formatu:Jak podzielić ramkę danych na parzyste, a nawet lata?

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

Chcę podzielić i przechowywać je w dwóch zmiennych/dataframes na podstawie tego, czy rok jest parzyste, czy nieparzyste.

Więc w zasadzie jeden dataframe/zmienna będzie miała lat nawet

19620101 1 2 4 
    19640103 0 2 3 

podczas gdy inny będzie musiał latach nieparzystych:

19630102 6 2 3 
    19650104 0 1 3 

Jak mogę to zrobić?

Odpowiedz

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

Jeśli rok jest przechowywane w czterech pierwszych znaków w pierwszej kolumnie, następnie

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

gdzie d jest 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)) 
Powiązane problemy