根据矩阵中的值重复向量元素
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
的行。我也无法下载软件包。你能帮帮我吗
您可以将 lapply
与 asplit
和 rep
一起使用。
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"
我想重复向量 '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
的行。我也无法下载软件包。你能帮帮我吗
您可以将 lapply
与 asplit
和 rep
一起使用。
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"