r - 如何索引包含列表/向量作为值的数据框
问题描述
索引数据框适用于单个值,但不适用于列表元素或向量的值。
我有两个需要匹配的基因列表。在每个列表中,基因被命名为不同的基因别名。我需要查询大量基因以过滤掉两个数据集之间未共享的任何基因。为此,我创建了一个数据框,其中包含两个列表中的所有基因。数据框中的每个值都是单个字符串或多个字符串(别名)的向量。一个单独的列为每组别名分配一个唯一编号,我用它来匹配两个列表。对于每个基因,我需要检查它是否存在于数据框中。但我无法索引向量值。见下文:
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
解决方案
因为它是一个list
,我们可以unlist
"MALAT1" %in% unlist(df$col1)
#[1] TRUE
原因,第二个返回TRUE
是因为第二个元素是length
1 而带有“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
推荐阅读
- symfony - Symfony 2.8 两个数据库连接
- python - 在numpy数组python中计算连续的
- winforms - 某些用户的 WinForm 缩放不正确
- mysql - 尝试创建计算朋友的功能时出错
- java - Java Map - 在 getOrDefault 中找不到密钥时记录消息
- google-apps-script - 我有一种行之有效的方法来处理自动触发器检查/安装和多个电子表格之间的多个用户的更新间隔?
- python - Python Flask 以 cvs/xlsx 格式下载/上传数据库表
- python - 如何使用 numpy 将图像转换为数组以输入模型
- java - System.arraycopy 不断抛出 ArrayIndexOutOfException
- javascript - 在 Web 浏览器 ReactJS 中从 Firebase 存储下载文件(任何类型)