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

3

我想要重复向量"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是170000 x 250矩阵,而A是1x250向量,我尝试让代码尽可能地快,考虑到apply比loop更快。

我尝试运行以下apply命令:

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

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

尝试使用apply(a, 1, function(x) rep(A, x)) - Martin Gal
2个回答

3
你可以使用lapplyasplitrep
lapply(asplit(a,1), rep, x=A)
#[[1]]
#[1] "China"   "Alabama"
#
#[[2]]
#[1] "China" "China"

关于所需输出的最佳解决方案。 - Martin Gal

0

另一个基于R的选项

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

$X2
[1] "China" "China"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接