mon*_*nis 3 r subset dplyr purrr tidyverse
我有一个时间序列数据的数据框df1,我需要从 R 中提取多个“窗口”。我需要的窗口的起点和终点位于单独数据框 的两列中df2。起点和终点的值对应于所需窗口的行号。
在下面的示例中,我是解决方案的一部分,但目前仅提取第一个窗口。如何修改此示例以提取所有四个窗口?这可能是purrr的情况吗?
library(tidyverse)
# dataframe of data to subset
df1 <- tibble(my_values = rnorm(100))
# dataframe of windows (i.e. row number IDs) to extract from data
df2 <-tibble::tribble(
~window_start, ~window_end,
3L, 10L,
21L, 25L,
52L, 63L,
78L, 90L
)
# extracted data
df3 <- df1 %>%
slice(df2$window_start : df2$window_end)
Run Code Online (Sandbox Code Playgroud)
(注意。我知道这里有一个类似的问题 -使用另一个数据帧的开始点和停止点对数据帧进行子集化? - 但我的实际数据非常大,我很好奇非基于合并的解决方案是否会更快。)
小智 5
也许尝试这种方法purrr::map2
# dataframe of data to subset\ndf1 <- tibble(my_values = rnorm(100, mean = 45, sd = 30) %>% abs())\n\n# dataframe of windows (i.e. row number IDs) to extract from data\ndf2 <-tibble::tribble(\n ~window_start, ~window_end,\n 3L, 10L,\n 21L, 25L,\n 52L, 63L,\n 78L, 90L\n)\n\nsubset_thats_in <- function(mini, maxi){\n df1 %>% \n filter(between(my_values, mini, maxi))\n}\n\npurrr::map2(df2$window_start, \n df2$window_end, \n subset_thats_in)\nRun Code Online (Sandbox Code Playgroud)\n[[1]]\n# A tibble: 4 \xc3\x97 1\n my_values\n <dbl>\n1 6.47\n2 8.69\n3 7.73\n4 7.35\n\n[[2]]\n# A tibble: 12 \xc3\x97 1\n my_values\n <dbl>\n 1 24.2\n 2 22.9\n 3 22.4\n 4 24.4\n 5 22.6\n 6 21.7\n 7 23.2\n 8 21.3\n 9 23.3\n10 21.1\n11 23.5\n12 22.6\n\n[[3]]\n# A tibble: 10 \xc3\x97 1\n my_values\n <dbl>\n 1 54.0\n 2 61.4\n 3 62.5\n 4 60.8\n 5 60.5\n 6 55.5\n 7 61.4\n 8 59.0\n 9 57.9\n10 53.3\n\n[[4]]\n# A tibble: 6 \xc3\x97 1\n my_values\n <dbl>\n1 87.8\n2 79.1\n3 80.5\n4 82.7\n5 85.2\n6 80.6\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |