根据列表名称匹配从列表中填充矩阵

时间:2016-05-17 16:01:28

标签: r list matrix

我有一些数据:

num.list1 <- list(1,2,1,4,5)
num.list2 <- list(2,3)
num.list3 <- list(3,5,2)

num.data.list <- list(num.list1, num.list2, num.list3)

name.list1 <- list("A","B","C","D","E")
name.list2 <- list("B","C")
name.list3 <- list("A","C","E")

name.data.list <- list(name.list1, name.list2, name.list3)

all.names <- unique(unlist(name.data.list))

my.matrix <- matrix(data = NA, nrow = length(name.data.list), ncol =     length(all.names))

colnames(my.matrix) <- all.names

我想根据my.matrix的列名与num.data.list中的值进行匹配,使用my.matrix中的值填充name.data.list

即。 :

      A    B    C    D    E

1     1    2    1    4    5  

2     NA   2    3    NA   NA

3     3    NA   5   NA    2

任何想法?感谢。

3 个答案:

答案 0 :(得分:2)

我开始给num.data.listname.data.list正确的结构:

num.data.list<-lapply(num.data.list,unlist)
name.data.list<-lapply(name.data.list,unlist)

然后:

for (i in 1:nrow(my.matrix)) my.matrix[i,name.data.list[[i]]]<-num.data.list[[i]]
my.matrix
#      A  B C  D  E
#[1,]  1  2 1  4  5
#[2,] NA  2 3 NA NA
#[3,]  3 NA 5 NA  2

答案 1 :(得分:2)

使用矩阵子集:

library(reshape2)

nm = melt(name.data.list)

my.matrix[matrix(c(nm$L1, match(nm$value, all.names)), ncol = 2)] = unlist(num.data.list)
#      A  B C  D  E
#[1,]  1  2 1  4  5
#[2,] NA  2 3 NA NA
#[3,]  3 NA 5 NA  2

答案 2 :(得分:2)

这是您可以使用Maprbindlist函数执行的另一个选项,假设您的名称和数据的顺序使num.data.list中的每个元素都与name.data.list中的相应元素匹配library(data.table); rbindlist(Map(function(x, y) setNames(data.frame(x), y), num.data.list, name.data.list), fill = T) A B C D E 1: 1 2 1 4 5 2: NA 2 3 NA NA 3: 3 NA 5 NA 2

-(IBAction)enableScrollButtonPressed:(id)sender
{
    self.myTextView.scrollEnabled = YES;
    self.myTextView.contentSize = [self.myTextView sizeThatFits:self.myTextView.frame.size];
}