从具有不同行数的 lapply 函数创建数据框
Creating a dataframe from an lapply function with different numbers of rows
我有一个日期列表 (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"))
我之前问过的一个类似问题()通过这个函数用每天的数据(其中有平衡的行数)得到了有效的回答...
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)
尝试
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),]))
我有一个日期列表 (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"))
我之前问过的一个类似问题(
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)
尝试
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),]))