【问题标题】:Searching for a list of string in a dataframe in R在R中的数据框中搜索字符串列表
【发布时间】:2017-07-27 13:30:00
【问题描述】:

我有一个名称列表和一个包含许多不同列的 data.frame。如何在数据框中检索其 row.name 是我列表中的名称之一的行?

例如,如果我的数据框中的 row.names 有很多行,包括 TC09001536.hg.1TC03002852.hg.1TC18000664.hg.1 名称,它们保存在名为 Top.list 的列表中。 假设我的数据框被称为 df 然后我尝试了:

test <- df[grep(Top.list, df$cluster_id),]

cluster_id 列中查找,如果与我列表中的名称匹配,则给我整行。

【问题讨论】:

  • 我不太明白你的问题,但如果你想在top.list 中获得row.namesdf,那么你会做df[row.names(df) %in% top.list,]

标签: r dataframe


【解决方案1】:

这应该可行:

test <- df[unlist(lapply(Top.list, function(x) grep(x, df$cluster_id, fixed = TRUE))),]

lapply(Top.list, function(x) grep(x, df$cluster_id, fixed = TRUE)) 部分为您的每个单词生成一个包含匹配行号的向量的列表,unlist 将向量组合成一个向量,您的数据帧将从该向量中被子集。

【讨论】:

  • 非常感谢里奥。如果 Top.list 中的字符串是另一个 data.frame 的 row.name,例如 row.names(df2) 而不是代码中的 Top.list,这是否也有效?
  • 该代码适用于我能想到的每个向量/对应字符串的列表。您想在另一个数据框的行名中搜索一个数据框的行名,还是在变量cluster_id 中再次搜索?
  • 是的,变量 cluster_id 中一个数据帧的行名。
  • 是的,应该和上面一样。只需输入rownames(df) 而不是Top.list
  • 我正在尝试在 data.frame2 的变量“external_gene”中查找 data.frame1 的一列中的字符串,并从 data.frame 2 中提取所有匹配的行。因为我有我的data.frame中有52列,我想对变量“external_gene from data.frame2”中的重命名列执行类似的搜索。无法让 grep 函数完成这项工作。我该怎么做?非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多