将具有不同元素长度的列表转换为数据框并组织具有公共值的行

时间:2018-02-27 15:39:18

标签: r list sorting

我是R的新手,刚开始使用list。 我有一个不同长度的列表,我想将其转换为数据框。 我的列表看起来像这样:

List of A:  
$ reference: chr [1:20000] "13000" "5000" "23234" ...  
$ name_1 : chr [1:9000] "5000" "14523" ...  
$ name_2 : chr [1:800] "13000" "23234" ...

我想建立一个类似这样的数据框:

reference name_1 name_2  
13000     NA     13000  
5000      5000   NA  
23234     NA     23234

非常感谢你的帮助!我尝试用NAs填充列的其余部分,因此它们的长度与""相同。但它仍然没有按照我想要的方式组织它!

2 个答案:

答案 0 :(得分:0)

这样的东西?

A <- list()
A$reference <- c("13000","5000","23234")
A$name_1 <- c("5000","14523")
A$name_2 <- c("13000","23234")

B <- data.frame(reference = A$reference,
                name1 = ifelse(A$reference %in% A$name_1,A$reference,NA),
                name2 = ifelse(A$reference %in% A$name_2,A$reference,NA))

#   reference name1 name2
# 1     13000  <NA> 13000
# 2      5000  5000  <NA>
# 3     23234  <NA> 23234

答案 1 :(得分:0)

如果name_1name_2的所有值都在ref中,那么您可以执行以下操作:

mapply(function(x,y){is.na(df$ref)<-!x%in%y;df$ref},df["ref"],df)
      ref <NA> <NA>
 [1,]   1    1   NA
 [2,]   2   NA    2
 [3,]   3    3   NA
 [4,]   4   NA    4
 [5,]   5    5   NA
 [6,]   6   NA    6
 [7,]   7    7   NA
 [8,]   8   NA    8
 [9,]   9    9   NA
[10,]  10   NA   10
[11,]  11   NA   NA
[12,]  12   NA   NA
[13,]  13   NA   NA
[14,]  14   NA   NA
[15,]  15   NA   NA

DATA

df=list(ref=1:15,name1=c(1,3,5,7,9),name2=1:5*2)

 df
$ref
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

$name1
[1] 1 3 5 7 9

$name2
[1]  2  4  6  8 10