基于另一个列表中的数字的矩阵列表的样本行
Sample rows of a list of matrices based on numbers from another list
我有一个矩阵列表,我想根据另一个列表的数字从中随机抽取行。这是矩阵列表:
x <- list(`1` = matrix(1:20, nrow=10), `2` = matrix(1:20, nrow=10))
这是号码列表
y <- list(`1` = 2, `2` = 3) #for `1` I want to draw 2 rows and for `2` I want to draw 3 rows
最终列表如下所示:
$`1`
[,1] [,2]
[1,] 1 11
[2,] 6 16
$`1`
[,1] [,2]
[1,] 1 11
[2,] 7 17
[3,] 9 19
如何在 base R 中实现这一点?感谢您的帮助!
我们可以在 base R
中使用 Map
- 遍历 'x' 的相应 list
元素并 'y' 对 [=16= 的行进行采样'x' 中的 ] 基于 'y'
中的值
Map(function(u, v) u[sample(seq_len(nrow(u)), v),], x, y)
$`1`
[,1] [,2]
[1,] 9 19
[2,] 6 16
$`2`
[,1] [,2]
[1,] 3 13
[2,] 8 18
[3,] 5 15
或使用 map2
来自 purrr
library(purrr)
map2(x, y, ~ .x[sample(seq_len(nrow(.x)), .y), ])
如果我们转换成tibble
,那么slice_sample
也可以使用
library(dplyr)
library(tibble)
map2(x, y, ~ .x %>%
as.data.frame %>%
as_tibble %>%
slice_sample(n = .y))
$`1`
# A tibble: 2 × 2
V1 V2
<int> <int>
1 4 14
2 7 17
$`2`
# A tibble: 3 × 2
V1 V2
<int> <int>
1 8 18
2 6 16
3 9 19
我有一个矩阵列表,我想根据另一个列表的数字从中随机抽取行。这是矩阵列表:
x <- list(`1` = matrix(1:20, nrow=10), `2` = matrix(1:20, nrow=10))
这是号码列表
y <- list(`1` = 2, `2` = 3) #for `1` I want to draw 2 rows and for `2` I want to draw 3 rows
最终列表如下所示:
$`1`
[,1] [,2]
[1,] 1 11
[2,] 6 16
$`1`
[,1] [,2]
[1,] 1 11
[2,] 7 17
[3,] 9 19
如何在 base R 中实现这一点?感谢您的帮助!
我们可以在 base R
中使用 Map
- 遍历 'x' 的相应 list
元素并 'y' 对 [=16= 的行进行采样'x' 中的 ] 基于 'y'
Map(function(u, v) u[sample(seq_len(nrow(u)), v),], x, y)
$`1`
[,1] [,2]
[1,] 9 19
[2,] 6 16
$`2`
[,1] [,2]
[1,] 3 13
[2,] 8 18
[3,] 5 15
或使用 map2
来自 purrr
library(purrr)
map2(x, y, ~ .x[sample(seq_len(nrow(.x)), .y), ])
如果我们转换成tibble
,那么slice_sample
也可以使用
library(dplyr)
library(tibble)
map2(x, y, ~ .x %>%
as.data.frame %>%
as_tibble %>%
slice_sample(n = .y))
$`1`
# A tibble: 2 × 2
V1 V2
<int> <int>
1 4 14
2 7 17
$`2`
# A tibble: 3 × 2
V1 V2
<int> <int>
1 8 18
2 6 16
3 9 19