仅当数据包含特定值时才从数据框列中提取数据

时间:2018-03-16 21:26:32

标签: sql r dataframe

R中的编程相当新, 我有一个数据框,我试图通过拉动整行来创建一个更简洁的表,只要它在" name"中包含某个名称。柱。这些名称都在一个单独的文本文档中。有什么建议?

我试过了:

refGenestable <- dbGetQuery(con, "select row_names, name, chrom, strand, txStart, txEnd from refGene where name in c_Gene")

其中c_Gene是我需要测试的名称列表,我已经变成了一个数据帧。我也试过变成一个字符串列表并迭代它,但也遇到了问题

编辑: 抱歉混淆我还在学习!我在R中创建了dataframe(&#34; refGenestable&#34;)(但是它是来自SQL数据库)但我现在想要将其缩小到仅包含与文本文件中包含的名称相同的行, c_Genes,其中每个名称由\ n分隔。我从这个文件中创建了一个列表

1 个答案:

答案 0 :(得分:0)

您可能会遇到一些问题。很难确切知道您需要什么,因为不清楚您的数据结构是什么。

一般问题很容易回答。

如果您有一个数据框,并且想要一个仅包含向量中名称的新数据框,则可以使用DF[DF$name %in% <some vector>)或使用dplyr filter(DF, name %in% <some vector>)。您不能使用%in%来测试数据中是否存在某些内容。您必须在其他数据框中实际提取变量。

如果您要保留的名称是文本文件中的行,那么您还会询问有关如何将文本文件导入R的问题,在这种情况下它是my_vector <- readLines("path to file")。实际代码将取决于文件的结构,但如果每个元素都在一个新行上,那么它将完成你想要的。

如果您要保留的名称位于另一个数据框中,则需要将它们作为向量提取,以便使用%in%,即filter(DF, name, name %in% OTHERDF$name)

编辑: 从您的编辑到问题,我的答案可能适合您。尽管如此,我们仍然不确定数据的结构是什么而没有看到它(你可以通过粘贴dput(<your object>)的输出来提供它。这是上面的答案,使用你所拥有的对象的名称我描述过。

gene_names <- readLines("c_Genes")
# is that really the name? No extension? Is it in your working directory?
# if not, you need to use a relative or absolute path for c_Genes

genes_you_want <- refGenestable[refGenestable$name %in% gene_names,]
# is the column with the gene name called name? 
# don't forget the comma at the end

# or with dplyr
install.packages("dplyr")
library(dplyr)

genes_you_want <- filter(refGenestable, name %in% gene_names)