根据矩阵中的值重复向量元素

Repeat vector elements according to values in matrix

我想重复向量 'A' 中的每个元素,重复矩阵 'a' 中指定的次数。矩阵中的列对应于向量中的每个元素。要应用的重复次数是从矩阵逐行获得的。

A <- c("China", "Alabama")
a <- matrix(c(1,2,1,0),2,2)
a
#      [,1] [,2]
# [1,]    1    1
# [2,]    2    0

示例中,第一行'a'([1,] 1 1)指定“中国”应重复1次,而“阿拉巴马”1,等等。

结果应该是一个列表,每行一个元素的矩阵:

output <- list(c("China", "Alabama"), c("China", "China"))
output
# [[1]]
# [1] "China"   "Alabama" 
#
# [[2]]
# [1] "China" "China"

这可以通过双循环轻松完成,但在我的实际情况下,a 是 170 000 x 250 矩阵,A 是 1x250 向量,考虑到应用比循环快。

我尝试 运行 以下应用命令:

apply(a, 1, function(x,y) rep(y,x), x=a, y=A)

但它不起作用,因为 a 不是 a 的一行而是整个矩阵,我不知道如何在应用中引入 a 的行。我也无法下载软件包。你能帮帮我吗

您可以将 lapplyasplitrep 一起使用。

lapply(asplit(a,1), rep, x=A)
#[[1]]
#[1] "China"   "Alabama"
#
#[[2]]
#[1] "China" "China"

另一个基础 R 选项

> lapply(data.frame(t(a)),rep, x = A)
$X1
[1] "China"   "Alabama"

$X2
[1] "China" "China"