r - 在两个向量中的值之间过滤数据框并将结果添加到 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)))
干杯!
解决方案
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])
}
推荐阅读
- firebase - 在 Flutter 应用中管理 Firebase 实例
- java - 形成山脉的方法数
- python - 子串任何类型的 HTML 字符串
- xml - 找不到消息正文作者
- c# - 在数据库中同时从文本框和 datagridview 插入
- rust - 如何使用运算符“?” 与共享 mpsc?
- windows - 上下文切换的时间
- google-apps-script - 同时来自多个用户的 appendRow() 和 deleteRow()
- spring - Spring Boot 应用程序无法启动异常 org.springframework.beans.factory.NoSuchBeanDefinitionException:
- javascript - 如何播放保存在我的谷歌驱动器上的视频文件?