2016-04-07 11 views
0

teilen Ich habe eine dataframe enthält Daten, date Typ. Ich möchte die dataframe in n verschiedenen Datarahmen (df1, df2, ......,dfn) je nach Monat teilen, damit ich jeden Monat separat weiter bearbeiten kann. merkwürdig, dass der gleiche Monat der verschiedenen Jahre anders sein wird. Eine Schleife wird nett sein, da es unbegrenzte Daten geben kann. Bitte geben Sie mir einen Vorschlag. Ich kann nicht verstehen, wie ich vorgehen soll.Wie man Datenrahmen basierend auf Monatsrahmen in R

dates <- as.Date(c("2015-05-01", "2015-05-15","2016-05-01", "2016-05-15","2016-06-02", "2016-06-12")) 
names <- c("Mr A", "Ms B", "", "Ms C", "Mr K", "Mr S") 
comments <- c("first comment", "", "third comment", "fourth comment", "fifth comment", "sixth comment") 
like <- as.integer(c(2,4,0,6,0,3)) 
df <- data.frame(dates, names, comments, like, stringsAsFactors = FALSE) 

## classification according to month, for each particular year 
# df[order(as.Date(df$dates, format="%Y-%m-%d")),] # it sorts dataframe, not what I need 

# df1 <- subset(df, as.Date(dates) < as.Date("2015-05-31")) 
# print(df1) 
# df2 <- subset(df, as.Date(dates)<as.Date("2016-05-31")) 
# print(df2) 
# df3 <- subset(df, as.Date(dates) < as.Date("2016-06-01")) 
# print(df3) 

z.B. zuerst sollte df1 so sein,

 dates names  comments like 
1 2015-05-01 Mr A first comment 2 
2 2015-05-15 Ms B     4 

Antwort

1

So etwas wie das?

library(zoo) 
split(df,as.yearmon(df$dates)) 
$`Mai 2015` 
     dates names  comments like 
1 2015-05-01 Mr A first comment 2 
2 2015-05-15 Ms B     4 

$`Mai 2016` 
     dates names  comments like 
3 2016-05-01  third comment 0 
4 2016-05-15 Ms C fourth comment 6 

$`Jun 2016` 
     dates names  comments like 
5 2016-06-02 Mr K fifth comment 0 
6 2016-06-12 Mr S sixth comment 3 
+0

Dank, lassen Sie mich versuchen. –

+0

absolut, es ist das, was ich gesucht habe. Aber eine Frage, es gibt als "Liste" zurück, wie die verschiedenen Listen als data.frame gespeichert werden? –

+1

@Noah sie sind Datenrahmen. Versuchen Sie 'mylist [[1]]' –

1
library(lubridate) 
a <- ymd("2015-05-01", tz = "UTC") + months(0:11) 
b <- ymd("2015-05-01", tz = "UTC") + months(0:11) + days(14) 
sort(c(a,b)) 
+0

ist eine neue Bibliothek, die ich nicht kannte, vielen Dank. –

Verwandte Themen