【问题标题】:Creating a dataframe from an lapply function with different numbers of rows从具有不同行数的 lapply 函数创建数据框
【发布时间】:2015-08-28 09:56:21
【问题描述】:

我有一个日期列表 (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”函数后,代码可以工作,但我得到了一个数据框列表。 我想做的是将一行 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)

【问题讨论】:

    标签: r dataframe lapply


    【解决方案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),]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多