R根据索引将列表填充到列中

R根据索引将列表填充到列中,r,data-structures,R,Data Structures,我有许多不同长度的数据集,我正试图将它们做成一个有序的数据结构 目前,我正试图在按索引号填充的基础上,将列表插入到常规数据结构中 使用以下代码: mat <- matrix(NA,nrow=5,ncol=6) mat[,1] <- LETTERS[1:5] vec1 <- c("B","D","E") vec2 <- c("A","C","E") m1 <- match(mat[,1],vec1) m2 <- match(mat[,1],vec2)

我有许多不同长度的数据集,我正试图将它们做成一个有序的数据结构

目前,我正试图在按索引号填充的基础上,将列表插入到常规数据结构中

使用以下代码:

mat <- matrix(NA,nrow=5,ncol=6)

mat[,1] <- LETTERS[1:5]

vec1 <- c("B","D","E")

vec2 <- c("A","C","E")

m1 <- match(mat[,1],vec1)

m2 <- match(mat[,1],vec2)


x1 <- which(!is.na(m1))

x2 <- which(!is.na(m2))
有什么建议或提示吗

谢谢

马特

试试看

mat[match(vec1, mat[,1]), 2] <- vec1 
mat[match(vec2, mat[,1]), 3] <- vec2 
mat
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] "A"  NA   "A"  NA   NA   NA  
# [2,] "B"  "B"  NA   NA   NA   NA  
# [3,] "C"  NA   "C"  NA   NA   NA  
# [4,] "D"  "D"  NA   NA   NA   NA  
# [5,] "E"  "E"  "E"  NA   NA   NA  
mat[匹配(vec1,mat[,1]),2]尝试

mat[匹配(vec1,mat[,1]),2]尝试

mat[匹配(vec1,mat[,1]),2]尝试


mat[match(vec1,mat[,1]),2]如果要匹配的列数更多,也可以这样做:

   mat1 <- mat 
   indx <-  which(outer(mat[,1], c(vec1, vec2), "=="), arr.ind=TRUE)[,1]
   indx1 <- rep(1:2, c(length(vec1), length(vec2))) +1

   mat[cbind(indx, indx1)] <- c(vec1,vec2)
   mat
   #     [,1] [,2] [,3] [,4] [,5] [,6]
   #[1,] "A"  NA   "A"  NA   NA   NA  
   #[2,] "B"  "B"  NA   NA   NA   NA  
   #[3,] "C"  NA   "C"  NA   NA   NA  
   #[4,] "D"  "D"  NA   NA   NA   NA  
   #[5,] "E"  "E"  "E"  NA   NA   NA  

mat1如果要匹配的列数更多,也可以这样做:

   mat1 <- mat 
   indx <-  which(outer(mat[,1], c(vec1, vec2), "=="), arr.ind=TRUE)[,1]
   indx1 <- rep(1:2, c(length(vec1), length(vec2))) +1

   mat[cbind(indx, indx1)] <- c(vec1,vec2)
   mat
   #     [,1] [,2] [,3] [,4] [,5] [,6]
   #[1,] "A"  NA   "A"  NA   NA   NA  
   #[2,] "B"  "B"  NA   NA   NA   NA  
   #[3,] "C"  NA   "C"  NA   NA   NA  
   #[4,] "D"  "D"  NA   NA   NA   NA  
   #[5,] "E"  "E"  "E"  NA   NA   NA  

mat1如果要匹配的列数更多,也可以这样做:

   mat1 <- mat 
   indx <-  which(outer(mat[,1], c(vec1, vec2), "=="), arr.ind=TRUE)[,1]
   indx1 <- rep(1:2, c(length(vec1), length(vec2))) +1

   mat[cbind(indx, indx1)] <- c(vec1,vec2)
   mat
   #     [,1] [,2] [,3] [,4] [,5] [,6]
   #[1,] "A"  NA   "A"  NA   NA   NA  
   #[2,] "B"  "B"  NA   NA   NA   NA  
   #[3,] "C"  NA   "C"  NA   NA   NA  
   #[4,] "D"  "D"  NA   NA   NA   NA  
   #[5,] "E"  "E"  "E"  NA   NA   NA  

mat1如果要匹配的列数更多,也可以这样做:

   mat1 <- mat 
   indx <-  which(outer(mat[,1], c(vec1, vec2), "=="), arr.ind=TRUE)[,1]
   indx1 <- rep(1:2, c(length(vec1), length(vec2))) +1

   mat[cbind(indx, indx1)] <- c(vec1,vec2)
   mat
   #     [,1] [,2] [,3] [,4] [,5] [,6]
   #[1,] "A"  NA   "A"  NA   NA   NA  
   #[2,] "B"  "B"  NA   NA   NA   NA  
   #[3,] "C"  NA   "C"  NA   NA   NA  
   #[4,] "D"  "D"  NA   NA   NA   NA  
   #[5,] "E"  "E"  "E"  NA   NA   NA  

mat1谢谢,这正是我所要求的。谢谢,这正是我所要求的。谢谢,这正是我所要求的。谢谢,这正是我所要求的。
  vec3 <- c("A", "D")
  vec4 <- c("B", "C")
  veclist <- mget(ls(pattern="vec\\d"))

  unlist(veclist, use.names=FALSE)
  #[1] "B" "D" "E" "A" "C" "E" "A" "D" "B" "C"

  indx <-  which(outer(mat[,1], unlist(veclist), "=="), arr.ind=TRUE)[,1]

  indx1 <- rep(seq(length(veclist))+1, sapply(veclist, length))
  mat1[cbind(indx, indx1)] <- unlist(veclist)
  mat1
  #    [,1] [,2] [,3] [,4] [,5] [,6]
  #[1,] "A"  NA   "A"  "A"  NA   NA  
  #[2,] "B"  "B"  NA   NA   "B"  NA  
  #[3,] "C"  NA   "C"  NA   "C"  NA  
  #[4,] "D"  "D"  NA   "D"  NA   NA  
  #[5,] "E"  "E"  "E"  NA   NA   NA