在函数的循环中按日期过滤df

时间:2015-06-30 18:47:10

标签: r

我一直在遇到一些问题,我认为这是一个非常简单的问题。我有一个函数,它将数据帧列表和日期范围作为输入,按日期过滤数据帧,然后执行其他一些操作。简单地说,它看起来像这样:

my_function <- function(df_list, date_range = c(min, max)) {
  for(i in 1:length(df_list)) {
    df_list[[i]] <- df_list[[i]][df_list[[i]]$date >= as.Date(date_range[1])]
    df_list[[i]] <- df_list[[i]][df_list[[i]]$date <= as.Date(date_range[2])]
  }
  etc
}

有了上述内容,我收到错误undefined columns selected。我也试过过滤器和lapply,如:

lapply(df_list, function(df) {
  df <- filter(df, week >= as.Date(date_range[1]))
  df <- filter(df, week <= as.Date(date_range[2]))
}

哪个不会出错,但仍无效。

我觉得这并不像我做的那么难。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我会使用lapply。你可以用你想要的东西来实现:

date_range <- as.Date(date_range) # no need to do this on every iteration of the lapply function
df_list <- lapply(df_list,
  function(x) x[x$week >= date_range[1] & x$week <= date_range[2], ])

正如@Frank指出的那样,你的第一段代码的主要问题是你在子集化时缺少一个尾随逗号。对于第二个,它应该工作,但您需要将其分配回df_list