如何有效地将矢量转换为矩阵,以便矢量的值确定列,元素排序确定行,然后确定在这些索引处分配的值.
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)
看例子:
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)