【发布时间】: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