Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将两个嵌套列表与可变长度的子列表合并_R - Fatal编程技术网

R 将两个嵌套列表与可变长度的子列表合并

R 将两个嵌套列表与可变长度的子列表合并,r,R,我希望合并两个嵌套列表。两个列表包含相同数量的子列表。两个列表中的子列表成对关联,索引号相同,即list1$'1'中的值与list2$'1'中的描述关联。列表1的子列表中的值的顺序对应于相同索引号的列表2中的子列表中的顺序。我想将这两个列表合并到一个表中,所有类别作为列,子列表索引号作为行 列表1:值 $`1` [1] "1.0" $`8` [1] "1.0" $`13` [1] "1.0" $`2` [1] "1.0" $`39` [1] "6.79E-4" "2.26E-4" "0.

我希望合并两个嵌套列表。两个列表包含相同数量的子列表。两个列表中的子列表成对关联,索引号相同,即list1$'1'中的值与list2$'1'中的描述关联。列表1的子列表中的值的顺序对应于相同索引号的列表2中的子列表中的顺序。我想将这两个列表合并到一个表中,所有类别作为列,子列表索引号作为行

列表1:值

$`1`
[1] "1.0"

$`8`
[1] "1.0"

$`13`
[1] "1.0"

$`2`
[1] "1.0"

$`39`
[1] "6.79E-4" "2.26E-4" "0.99" "1.13E-4"
清单2:说明

$`1`
[1] "TypeA"

$`8`
[1] "TypeA"              

$`13`
[1] "TypeJ"

$`2`
[1] "TypeH"

$`39`
[1] "TypeE" "TypeG" "TypeD" "TypeA"
预期结果:

     No    TypeA  TypeD    TypeE    TypeG  TypeH  TypeJ
      1      1.0      0        0        0      0      0 
      8      1.0      0        0        0      0      0  
     13        0      0        0        0      0    1.0     
      2        0      0        0        0    1.0      0
     39  1.13E-4   0.99  6.79E-4  2.26E-4      0      0      

谢谢你的建议

因为您使用
mapply“并行”传递两个列表,所以会看到一个可能的选择,但我没有看到一个干净的方法。相反,我们将尝试使用for循环来填充具有命名维度的矩阵。这是尚未测试的,因为我发现从打印输出重建列表很乏味,并且同意Flick先生的观点,这是您的责任:

mtx <- matrix( NA, nrow=length(List1), ncol=length(unique(unlist(List2))), dimnames=list( names(List1), unique(unlist(List2) ) ) )
for (i in seq_along(List1) ){
  mtx[ names(List1)[i] , List2[[i]] ] <-  List1[[i]]  }
#-------
      TypeA TypeJ TypeH    TypeE    TypeG TypeD
1  1.000000     0     0 0.000000 0.000000  0.00
8  1.000000     0     0 0.000000 0.000000  0.00
13 0.000000     1     0 0.000000 0.000000  0.00
2  0.000000     0     1 0.000000 0.000000  0.00
39 0.000113     0     0 0.000679 0.000226  0.99

(请注意,我认为您构建的期望答案不正确。我还注意到,应用于作业RHS的as.numeric()似乎不需要,这让我有些困惑)。

另一个选项是使用
Map
,转换为
data.frame
rbind
列表
元素,并使用dcast将“长”转换为“宽”(数据来自@42-post)

库(data.table)

d1请以更详细的形式提供您的数据(即使用
dput()
> dput(List1)
structure(list(`1` = 1, `8` = 1, `13` = 1, `2` = 1, `39` = c(0.000679, 
0.000226, 0.99, 0.000113)), .Names = c("1", "8", "13", "2", "39"
))
> dput(List2)
structure(list(`1` = "TypeA", `8` = "TypeA", `13` = "TypeJ", 
    `2` = "TypeH", `39` = c("TypeE", "TypeG", "TypeD", "TypeA"
    )), .Names = c("1", "8", "13", "2", "39"))
library(data.table)
d1 <- rbindlist(Map(data.frame, List1, List2,
   names(List1), MoreArgs=list(stringsAsFactors=FALSE)))
setnames(d1, paste0("V", seq_along(d1)))
dcast(d1, V3~V2, value.var="V1", fill=0)