【问题标题】:Apply filter function on list elements对列表元素应用过滤功能
【发布时间】:2021-06-03 09:18:57
【问题描述】:

我想使用过滤器功能对我的数据(列表中的列表)进行子集化,我想根据带有选定日期的列表进行过滤。 应用于单个子列表,效果很好,但是将整个数据集升级为 for 循环会导致索引或子列表自​​动添加到主列表(输出只是最后一个子列表)方面的问题。

一个列表元素的过滤:


library(dplyr)
sublist_1 <- data.frame("value" = rnorm(10), "date" = 1:10, "parameter" = "X")
sublist_2 <- data.frame("value" = rnorm(10), "date" = 1:10, "parameter" = "Y"))
selected_dates_X <- c(3, 5, 7)
selected_dates_Y <- c(4, 6, 8)
df_total <-list("sublist_1" = sublist_1, "sublist_2" = sublist_2)


filtered_sublist_1 <- filter(df_total$sublist_2, 
                             date %in% selected_dates_Y)

我不成功地尝试在 for 循环中应用它,并添加了一个 if 语句。我想创建两个列表,分别为参数 X 和 Y 添加过滤后的数据。

df_X <- list()
df_Y <- list()

for (i in df_total) {
  if (i$parameter %in% "X") {
  filtered_sublist_X <- filter(df_total[[i]],
              date %in% selected_dates_X) 
  df_X[[length(df_X) + 1]] <- filtered_sublist_X
  
  } else {
    filtered_sublist_Y <- filter(df_total[[i]],
              date %in% selected_dates_Y) 
  df_Y[[length(df_Y) + 1]] <- filtered_sublist_Y
  }
}

作为输出,我想要两个数据集,按每个参数 X 和 Y 的 selected_date 过滤。 也许这不是一个合适的方法来做到这一点,然后随意提出其他解决方案,也许有一个函数和 lapply()? (试过了,还是不行)

谢谢!

【问题讨论】:

  • 您正在检查的i$parameter 是什么?它是列表的名称吗?如果您创建一个小的可重现示例以及预期的输出,则更容易提供帮助。阅读how to give a reproducible example。
  • 我的数据集是土壤含水量的建模时间序列,140 年来每天都有一个值。我想用确定的日期对我的数据进行子集化,因为我不需要所有的时间序列天数。在我的示例中,参数是两个土壤属性之一,可以是 X 或 Y。根据此属性,必须选择的日期不同,因此我想按 X 和 Y 排序,然后应用 selected_dates X 或 Y

标签: r for-loop filter


【解决方案1】:

你可以试试这个lapply 方法-

filtered_sublist_X <- lapply(df_total, function(x) 
            subset(x, parameter %in% "X" & date %in% selected_dates_X))

filtered_sublist_Y <- lapply(df_total, function(x) 
            subset(x, parameter %in% "Y" & date %in% selected_dates_Y))

【讨论】:

  • 如何在我的主列表“df_total”中的 840 个子列表中应用它?因此,我打算用 for 循环遍历主列表,但索引不起作用。
  • lapply 就像for 循环。它将函数(使用function(x))应用于每个子列表。你试过答案吗?它给你带来了什么?
猜你喜欢
  • 2023-03-23
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多