首页 > 解决方案 > 在两个向量中的值之间过滤数据框并将结果添加到 R 中的列表

问题描述

我有一个值的数据框,并且想使用两个向量来指定在数据框中的值之间进行过滤的位置,然后将每个过滤器的输出添加到列表中。

例如

mydata <- data.frame(x = 1:20)

v <- c(1,5,9)
v1 <- c(3,8,18)

expected_output <- list(c(1:3), c(5:8), c(9:18))

我一直在使用:

library(dplyr)
mydata <- mydata %>% 
  filter(between(x, v, v1))

当我只需要在两个值之间进行过滤时,它工作得很好,即 between v[1] and v1[1],但现在我需要在成百上千对之间进行过滤,它还达不到标准。我已经尝试过 lapply,如下所示和 for 循环,但我要么没有正确构建它们,要么使用了错误的工具来完成这项工作。

out <- lapply(mydata, function(filter(between(x, t, t1)))

干杯!

标签: rdplyr

解决方案


Tidyverse 解决方案 1(使用 purrr's map2):

library(tidyverse)
map2(v, v1, ~ filter(mydata, x >= .x & x <= .y))

Tidyverse 解决方案 2(这次使用map

map(1:length(v), ~ mydata[mydata$x >= v[.] & mydata$x <= v1[.],])

For循环解决方案

result <- list()
for (i in 1:length(v)) {
  result[[i]] <- filter(mydata, x >= v[i] & x <= v1[i])
}

推荐阅读