从具有不同行数的lapply函数创建数据框

时间:2015-06-12 11:43:30

标签: r dataframe lapply

我有一个日期列表(df2)和一个单独的数据框,其中包含每周日期和当天的测量值(df1)。我需要的是在采样日期(df2)之前的一年内输出数据帧,并用此测量。

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&#39;函数被删除,代码工作,但我得到一个数据框列表。 我想要做的是将一行NA附加到包含较少观察值的数据帧,以便我可以输出一个数据帧,这样我就可以应用函数而忽略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 个答案:

答案 0 :(得分: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),]))