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

Jor*_*dan 0 r

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

for(i in 1:length(Y)){  Z0[i, X[i]] <- Y[i] }
Run Code Online (Sandbox Code Playgroud)

djh*_*rio 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
Run Code Online (Sandbox Code Playgroud)

  • @Jordan需要一个单行的奇怪要求.两条线有什么问题? (3认同)