I have a list of indices that I want to use to extract observations from a list of data frames. A simplified example is as follows:
#A list of indices used to extract observations based on the time column from the `dat` dataset
time.index <- list(c(1,2,3), c(4,5,6), c(2,3,4))
#A list of data frames in which observations will be extracted based on the time column
dat <- list(case1=data.frame(time=1:10, y=rnorm(10)), case2=data.frame(time=1:10, y=rnorm(10)), case3=data.frame(time=1:10, y=rnorm(10)))
#The expected result will be like this:
$case1
time y
1 1 -0.8954070
2 2 0.0270242
3 3 -0.4256890
$case2
time y
4 4 1.5789
5 5 -0.6692
6 6 -2.3306
$case3
time y
2 2 -0.7371
3 3 -0.3271
4 4 0.4128
Anyone knows how to achieve that? Much appreciated!
You can use Map
:
Map(function(x, y) x[x$time %in% y, ], dat, time.index)
#$case1
# time y
#1 1 1.75
#2 2 1.13
#3 3 -1.45
#$case2
# time y
#4 4 2.212
#5 5 0.572
#6 6 0.149
#$case3
# time y
#2 2 -0.0377
#3 3 -0.1700
#4 4 0.8414
Similarly, using purrr
's map2
:
purrr::map2(dat, time.index, ~.x[.x$time %in% .y, ])