【问题标题】:Repeat vector elements according to values in matrix根据矩阵中的值重复向量元素
【发布时间】:2020-11-11 20:42:48
【问题描述】:

我想重复向量“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 行。我也无法下载软件包。你能帮帮我吗?

【问题讨论】:

  • 试试apply(a, 1, function(x) rep(A, x))

标签: r apply rep


【解决方案1】:

您可以将lapplyasplitrep 一起使用。

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

【讨论】:

  • 关于所需输出的最佳解决方案。
【解决方案2】:

另一个基本 R 选项

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

$X2
[1] "China" "China"

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2018-06-17
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多