选择唯一值

时间:2018-10-01 08:18:10

标签: r

我需要更改此功能,该功能与唯一值不匹配。例如,如果我想要MAPK4,则该函数将匹配MAPK41和AMAPK4等。该函数必须仅选择唯一值。

功能:

library(dplyr)

df2 <- df %>% 
  rowwise() %>%
  mutate(mutated = paste(mutated_genes[unlist(
    lapply(mutated_genes, function(x) grepl(x,genes, ignore.case = T)))], collapse=","),
    circuit_name = gsub("", "", circuit_name)) %>%
  select(-genes) %>%
  data.frame()

数据:

df <-structure(list(circuit_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", "MAP3K12","TRAF2", "CACNG3")

输出:

  circuit_name      mutated
1  hsa04010__117 MAP4K4,TRAF2
2  hsa04014__118       MAP4K4

3 个答案:

答案 0 :(得分:1)

请注意,基于mutated_genes向量,MAP3K12的预期输出缺少hsa04010__117

这里有tidyverse的可能性

df %>%
    separate_rows(genes) %>%
    filter(genes %in% mutated_genes) %>%
    group_by(circuit_name) %>%
    summarise(mutated = toString(genes))
## A tibble: 2 x 2
#  circuit_name  mutated
#  <chr>         <chr>
#1 hsa04010__117 MAP4K4, MAP3K12, TRAF2
#2 hsa04014__118 MAP4K4

说明:我们将逗号分隔的条目分成不同的行,然后仅选择genes %in% mutated_genes的那些行,并通过串联circuit_name条目来汇总每个genes的结果。


PS。就个人而言,我建议将数据保持整洁的长格式(即,不要将条目与toString连接在一起);这样,每个基因就有一行,这将使得对数据的任何后处理都更加简单。

答案 1 :(得分:1)

R的基本方法是在{,上拆分genes并返回与mutated_genes匹配的字符串。

df$mutated <- sapply(strsplit(df$genes, ","), function(x) 
   toString(grep(paste0(mutated_genes, collapse = "|"), x, value = TRUE)))

df[c(1, 3)]
#   circuit_name                mutated
#1 hsa04010__117 MAP4K4, MAP3K12, TRAF2
#2 hsa04014__118                 MAP4K4

答案 2 :(得分:0)

我们可以使用str_extract

library(stringr)
df$mutated <- sapply(str_extract_all(df$genes, paste(mutated_genes, 
         collapse="|")), toString)
相关问题