我有下面的列表列表。它包含两个变量:pair和gene的关系,pair
的包含总是两个字符串的向量,而变量genes
是一个可以包含多于1个值的向量。
lol <- list(structure(list(pair = c("BoneMarrow", "Pulmonary"), genes = "PRR11"), .Names = c("pair",
"genes")), structure(list(pair = c("BoneMarrow", "Umbilical"),
genes = "GNB2L1"), .Names = c("pair", "genes")), structure(list(
pair = c("Pulmonary", "Umbilical"), genes = "ATP1B1"), .Names = c("pair",
"genes")))
lol
#> [[1]]
#> [[1]]$pair
#> [1] "BoneMarrow" "Pulmonary"
#>
#> [[1]]$genes
#> [1] "PRR11"
#>
#>
#> [[2]]
#> [[2]]$pair
#> [1] "BoneMarrow" "Umbilical"
#>
#> [[2]]$genes
#> [1] "GNB2L1"
#>
#>
#> [[3]]
#> [[3]]$pair
#> [1] "Pulmonary" "Umbilical"
#>
#> [[3]]$genes
#> [1] "ATP1B1"
如何将其转换为dataframe:
pair1 pair2 genes_vec
BoneMarrow Pulmonary PRR11
BoneMarrow Umbilical GNB2L1
Pulmonary Umbilical ATP1B1
请注意,genes
变量是一个向量,而不是一个字符串。
我最好的尝试是这样的,这并没有给予我想要的:
> do.call(rbind, lapply(lol, data.frame, stringsAsFactors=FALSE))
pair genes
1 BoneMarrow PRR11
2 Pulmonary PRR11
3 BoneMarrow GNB2L1
4 Umbilical GNB2L1
5 Pulmonary ATP1B1
6 Umbilical ATP1B1
更新:
使用新示例显示genes
的矢量内容
lol2 <- list(structure(list(pair = c("BoneMarrow", "Pulmonary"), genes = c("GNB2L1",
"PRR11")), .Names = c("pair", "genes")), structure(list(pair = c("BoneMarrow",
"Umbilical"), genes = "GNB2L1"), .Names = c("pair", "genes")),
structure(list(pair = c("Pulmonary", "Umbilical"), genes = "ATP1B1"), .Names = c("pair",
"genes")))
lol2
#> [[1]]
#> [[1]]$pair
#> [1] "BoneMarrow" "Pulmonary"
#>
#> [[1]]$genes
#> [1] "GNB2L1" "PRR11"
#>
#>
#> [[2]]
#> [[2]]$pair
#> [1] "BoneMarrow" "Umbilical"
#>
#> [[2]]$genes
#> [1] "GNB2L1"
#>
#>
#> [[3]]
#> [[3]]$pair
#> [1] "Pulmonary" "Umbilical"
#>
#> [[3]]$genes
#> [1] "ATP1B1"
预期输出为:
pair1 pair2 genes_vec
BoneMarrow Pulmonary PRR11,GNB2L1
BoneMarrow Umbilical GNB2L1
Pulmonary Umbilical ATP1B1
6条答案
按热度按时间0lvr5msh1#
使用
tidyverse
,您可以使用purrr
来帮助您在第二个例子中,只要用
map(lol2, "genes")
替换map_chr(lol, "genes")
,因为你想保持一个嵌套的数据框和一个列表列。一种更通用的方法是使用嵌套的tibles,并根据需要取消嵌套
对于
lol2
,除非列表lol2
而不是lol1
,否则没有任何变化然后,您可以解嵌套所需的列
yyhrrdl82#
对于第一个问题,与其他答案几乎相同,略短/更紧凑:
创建于2020-12-04由reprex package(v0.3.0)
polhcujo3#
编辑:更新以使用矢量lol2。
也许像这样:
qpgpyjmq4#
这应该可以工作:
将基因视为载体的方式与将基因对视为载体的方式相同:而不是对1和2,您只需使用它们两者。
xu3bshqb5#
xwmevbvl6#
另一个tidyverse解决方案:版本
lol
得到与OP中相同的结果。lol2
将基因载体分成适当数量的列:创建于2023-04-13带有reprex v2.0.2