[英]How can I insert a list of values into a larger column based on matching values in R
if I have a preallocated array ie" 如果我有一个预分配的数组,即“
[1] [2] [3] [4] [5] [6]
A
B
C
D
E
F
..
..
Z
how can I insert lists of differing but shorter lengths ie (B,D,E,F)
or (A,C,EG,J,K)
in to the columns [2] : [6]
? 如何在
[2] : [6]
列中插入长度不同但较短的列表,例如(B,D,E,F)
或(A,C,EG,J,K)
?
Thanks, 谢谢,
sapply(newarray, function(elem) { master_list[,2] <- rbind(master_list[,2], elem})
elem
is the parameter to the anonymous function, passed as the second argument to sapply
. elem
是匿名函数的参数,作为第二个参数传递给sapply
。 Look in the help for more details. 在帮助中查找更多详细信息。
My rationale for these sorts of problems is to reduce everything to a single assignment. 对于此类问题,我的基本原理是将所有内容简化为一个任务。 In the case of matrices, you can index them using another matrix to achieve this, like so:
对于矩阵,可以使用另一个矩阵为它们建立索引,如下所示:
Set up a test array and vectors: 设置测试数组和向量:
arr <- matrix(NA,nrow=5,ncol=6)
arr[,1] <- LETTERS[1:5]
vec1 <- c("B","D","E")
vec2 <- c("A","C","E","G")
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] "A" NA NA NA NA NA
#[2,] "B" NA NA NA NA NA
#[3,] "C" NA NA NA NA NA
#[4,] "D" NA NA NA NA NA
#[5,] "E" NA NA NA NA NA
Figure out matrix columns to assign to: 找出要分配给的矩阵列:
vecs <- list(vec1,vec2)
lens <- sapply(vecs,length)
mat <- cbind(sequence(lens),rep(2:3,lens))
mat
# row col
# [,1] [,2]
#[1,] 1 2
#[2,] 2 2
#[3,] 3 2
#[4,] 1 3
#[5,] 2 3
#[6,] 3 3
#[7,] 4 3
Assign away: 分配:
arr[mat] <- unlist(vecs)
arr
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] "A" "B" "A" NA NA NA
#[2,] "B" "D" "C" NA NA NA
#[3,] "C" "E" "E" NA NA NA
#[4,] "D" NA "G" NA NA NA
#[5,] "E" NA NA NA NA NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.