使用向量过滤包含在数据框中的列表。 R工作室

时间:2018-05-18 16:36:31

标签: r list dataframe filter

我有一个两列数据框:一个名为" path_name",包含74个通路,另一个名为"基因",包含每个通路的基因列表。此外,我有一个包含28个突变基因的载体。我需要知道我可以找到每个突变基因的途径。例如:

mutated_genes=("MAP4K4"  "TRAF2"  "CACNG3" ...)

hsa04010__117 MAP4K4,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*, DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP3*,DUSP3*,DUSP3*,DUSP3*,PPM1A,AKT3,AKT3,AKT3,ZAK,MAP3K12,MAP3K13,TRAF2,CASP3,IL1R1,IL1R1,TNFRSF1A,IL1A,IL1A,TNF,RAC1,RAC1,RAC1,RAC1,MAP2K7,MAPK8,MAPK8,MAPK8,MECOM,HSPA1A,HSPA1A,HSPA1A,HSPA1A,HSPA1A,HSPA1A,MAP4K3,MAPK8IP2 MAP4K1....

hsa04014__118 MAP4K4,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10* ...

我需要这样的东西:

hsa04010= MAP4K4 TRAF2
hsa01014= CACNG3
....

我不知道如何使用R过滤数据框中包含的列表。我尝试使用子集函数来完成它,但它不正确。有没有人可以帮助我?提前谢谢。

1 个答案:

答案 0 :(得分:0)

更新 - dplyr方法可能

library(dplyr)

df1 <- df %>% 
  rowwise() %>%
  mutate(mutated = paste(mutated_genes[unlist(
    lapply(mutated_genes, function(x) x %in% strsplit(genes, ",")[[1]]))], collapse=","),
    path_name = gsub("_.*$", "", path_name)) %>%
  select(-genes) %>%
  data.frame()

输出为:

df1
  path_name      mutated
1  hsa04010 MAP4K4,TRAF2
2  hsa04014       MAP4K4

示例数据:

df <-structure(list(path_name = c("hsa04010__117", "hsa04014__118"
), genes = c("MAP4K4,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP3*,DUSP3*,DUSP3*,DUSP3*,PPM1A,AKT3,AKT3,AKT3,ZAK,MAP3K12,MAP3K13,TRAF2,CASP3,IL1R1,IL1R1,TNFRSF1A,IL1A,IL1A,TNF,RAC1,RAC1,RAC1,RAC1,MAP2K7,MAPK8,MAPK8,MAPK8,MECOM,HSPA1A,HSPA1A,HSPA1A,HSPA1A,HSPA1A,HSPA1A,MAP4K3,MAPK8IP2,MAP4K1", 
"MAP4K4,DUSP10*,DUSP10*,DUSP10*,DUSP10*,DUSP10*")), class = "data.frame", row.names = c(NA, 
-2L))

mutated_genes <- c("MAP4K4", "TRAF2", "CACNG3")