首页 > 解决方案 > 如何索引包含列表/向量作为值的数据框

问题描述

索引数据框适用于单个值,但不适用于列表元素或向量的值。

我有两个需要匹配的基因列表。在每个列表中,基因被命名为不同的基因别名。我需要查询大量基因以过滤掉两个数据集之间未共享的任何基因。为此,我创建了一个数据框,其中包含两个列表中的所有基因。数据框中的每个值都是单个字符串或多个字符串(别名)的向量。一个单独的列为每组别名分配一个唯一编号,我用它来匹配两个列表。对于每个基因,我需要检查它是否存在于数据框中。但我无法索引向量值。见下文:

df <- data.frame("col1"=I(list(c("MALAT1","FTK2","CAS9"),
                                 "MS4A6A",
                                 c("LACT1","FLEE6","LOC98"))),
                 "col2"=I(list(c("CASS4","MS4A2","NME"), 
                               "PLD3", 
                               "ADAM4")))
"MALAT1" %in% df$col1
[1] FALSE
"MS4A6A" %in% df$col1
[1] TRUE

标签: rindexingbioinformatics

解决方案


因为它是一个list,我们可以unlist

"MALAT1" %in% unlist(df$col1)
#[1] TRUE

原因,第二个返回TRUE是因为第二个元素是length1 而带有“MALAT1”的元素不是

-测试

如果我们将list具有单个元素的元素更改为“MALAT1”

df$col1[2] <- "MALAT1"
"MALAT1" %in% df$col1
#[1] TRUE

通常,当我们有 时list,如果我们想测试每个元素

lapply(df$col1, `%in%`, x = "LACT1")
#[[1]]
#[1] FALSE

#[[2]]
#[1] FALSE

#[[3]]
#[1] TRUE

推荐阅读