如何将向量转换为R中的矩阵索引

问题描述 投票:0回答:2

如何有效地将矢量转换为矩阵,以便矢量的值确定列,元素排序确定行,然后确定在这些索引处分配的值。

X <- c(1,2,3,1,1,3)
Y <- 1:6 
Z <- myfun(X, Y)

Z ## returns matrix
# 1  NA NA
# NA 2  NA
# NA NA 3
# 4  NA NA
# 5  NA NA
# NA NA 6

我正在寻找比我的for循环更好的单线程

Z0 <- X %o% rep(NA, length(unique(X)))

for(i in 1:length(Y)){  Z0[i, X[i]] <- Y[i] }
r
2个回答
6
投票

看例子:

X <- c(1,2,3,1,1,3)
Y <- 1:6

myfun <- function(X, Y) {
  Z <- matrix(NA, length(X), max(X))
  Z[cbind(seq_along(X), X)] <- Y
  Z
}

Z <- myfun(X, Y)
Z

3
投票

如果你坚持单行,那么@ djhurio的答案可以转换为

replace(matrix(NA, length(X), max(X)), cbind(1:length(X), X), Y)
#      [,1] [,2] [,3]
# [1,]    1   NA   NA
# [2,]   NA    2   NA
# [3,]   NA   NA    3
# [4,]    4   NA   NA
# [5,]    5   NA   NA
# [6,]   NA   NA    6
© www.soinside.com 2019 - 2024. All rights reserved.