2015-06-12 30 views
2

我有一個日期列表(df2)和一個包含每週日期和當天度量(df1)的單獨數據框。我需要的是在樣本日期前一年(df2)內輸出一個數據框,並用這個數據框進行測量。使用具有不同行數的lapply函數創建數據框

eg1 <- data.frame(Date=seq(as.Date("2008-12-30"), as.Date("2012-01-04"), by="weeks")) 
eg2 <- as.data.frame(matrix(sample(0:1000, 79*2, replace=TRUE), ncol=1)) 
df1 <- cbind(eg1,eg2) 
df2 <- as.Date(c("2011-07-04","2010-07-28")) 

類似的問題我以前問(Outputting various subsets from one data frame based on dates)得到的回答是有效的每日數據(這裏有行的平衡數量)通過此功能...

output <- as.data.frame(lapply(df2, function(x) { 
    df1[difftime(df1[,1], x - days(365)) >= 0 & difftime(df1[,1], x) <= 0, ] 
})) 

然而,每週數據行數不平均意味着這是不可能的。當'as.data.frame'函數被刪除時,代碼可以正常工作,但是我得到了一個數據框列表。 我想要做的就是追加NA對含有較少的觀察那些dataframes的一排,這樣我可以輸出一個數據幀,這樣我就可以申請功能簡單地忽略NA值如..

df2 <- as.Date(c("2011-01-04","2010-07-28")) 
output <- as.data.frame(lapply(df2, function(x) { 
df1[difftime(df1[,1], x - days(365)) >= 0 & difftime(df1[,1], x) <= 0, ] 
})) 
col <- c(2,4) 
output_two <- output[,col] 
Mean <- as.data.frame(apply(output_two,2,mean), na.rm = TRUE) 

回答

1

嘗試

lst <- lapply(df2, function(x) {df1[difftime(df1[,1], x - days(365)) >= 0 & 
       difftime(df1[,1], x) <= 0, ]}) 
    n1 <- max(sapply(lst, nrow)) 
    output <- data.frame(lapply(lst, function(x) x[seq_len(n1),])) 
+1

謝謝你Akrun,工作完美。 –

+0

@JamesWhite很高興知道它的工作原理 – akrun

相關問題