[英]Apply filter function on list elements
我想使用过滤器 function 对我的数据(列表中的列表)进行子集化,我想根据带有选定日期的列表进行过滤。 应用于单个子列表,它工作得很好,但是升级到整个数据集的 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
}
}
作为 output,我想要两个数据集,按每个参数 X 和 Y 的 selected_date 过滤。也许这不是一个合适的方法,然后随意提出其他解决方案,也许使用 function 和 lapply()? (试过了,还是不行)
谢谢!
您可以尝试这种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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.