使用正则表达式在数据框中查找行

问题描述 投票:0回答:2

我有一个翻译台(trans_df):

trans_df <- read.table(text = "rs1065852 rs201377835 rs28371706 rs5030655 rs5030865 rs3892097 rs35742686 rs5030656 rs5030867 rs28371725 rs59421388
                       G           C          G         A         C         C          T        CTT         T          C          C
                       G           C          G         A         C         C        del        CTT         T          C          C
                       A           C          G         A         C         T          T        CTT         T          C          C
                     del         del        del       del       del       del        del        del       del        del        del
                       G           C          G       del         C         C          T        CTT         T          C          C
                       G           C          G         A         C         C          T        CTT         G          C          C
                       G           C          G         A         C         C          T        del         T          C          C
                       A           C          G         A         C         C          T        CTT         T          C          C
                       G           C          A         A         C         C          T        CTT         T          C          C
                       G           C          G         A         C         C          T        CTT         T          C          T
                       G           C          G         A         C         C          T        CTT         T          T          C",header=TRUE, stringsAsFactors = FALSE, colClasses = "character")

input

    input <- read.table(text = "rs1065852 rs201377835 rs28371706 rs5030655 rs5030865 rs3892097 rs35742686 rs5030656 rs5030867 rs28371725 rs59421388
+ G|A           C        G|A         A         C       T|C          T  CTT         T        C|T          C", header = TRUE, stringsAsFactors = FALSE, colClasses = "character")

我想使用正则表达式在trans_df中找到输入行。我已经通过以下方式实现了它:

Reduce(intersect,lapply(seq(1, ncol(trans_df)), 
                          function(i) {grep(pattern = input[, i], 
                          trans_df[, i])}))

有没有办法在pattern = input的地方做到这一点?请指教。

r dataframe input
2个回答
1
投票

你可以使用Mapto实现那个,即

Map(grep, input, trans_df)

但是,这会假设您的列与一对一匹配。如果这不成立,那么你可以使用match使它们相同,即

Map(grep, input[match(names(input), names(trans_df))], trans_df)
#or in the same sense and to keep input intact,
Map(grep, input, trans_df[match(names(trans_df), names(input))])

但是,我认为这会打败你的目的。


1
投票

我会在这里使用subset()并传递匹配行的标准。在这种情况下,标准涉及根据一组已知值检查数据框中的每一列。假设输入是命名向量,我们可以尝试以下代码:

subset(trans_df, rs1065852 == input["rs1065852"] & rs201377835 == input["rs201377835"] &
       ... & rs59421388 == input["rs59421388"])
© www.soinside.com 2019 - 2024. All rights reserved.