簡體   English   中英

R通過注釋數據框替換列中的單詞

[英]R replacing words in column by annotation dataframe

我有一個包含 1 列基因 ID (data1) 的數據框。 在另一個數據框中,我有相應的基因名稱(data2)。 Data1 還包含具有多個基因名的細胞,用“:”分隔,還有很多 NA。 最好我想用相應的基因名稱向 data1 添加一列,如果有多個,也用“:”分隔。 另一種方法是用相應的基因名稱替換 data1 中的所有基因名稱。 知道如何解決這個問題嗎? 謝謝!

a <- c("ENSG00000150401:ENSG00000150403", "ENSG00000185294", "NA")
data1 <- data.frame(a)


b <- c("ENSG00000150401", "ENSG00000150403", "ENSG00000185294")
c <- c("GeneA", "GeneB", "GeneC")
data2 <- data.frame(b,c)

涉及stringr一種選擇可能是:

data1$res <- str_replace_all(data1$a, setNames(data2$c, data2$b))

                                a         res
1 ENSG00000150401:ENSG00000150403 GeneA:GeneB
2                 ENSG00000185294       GeneC
3                              NA          NA

我們可以得到長格式的data1left_join data2並將值粘貼在一起。

library(dplyr)

data1 %>%
  mutate(row = row_number()) %>%
  tidyr::separate_rows(a, sep = ":") %>%
  left_join(data2, by = c('a' = 'b')) %>%
  group_by(row) %>%
  summarise(a = paste0(a, collapse = ":"), 
            c = paste0(c, collapse = ":")) %>%
  select(-row)

#  a                               c          
#  <chr>                           <chr>      
#1 ENSG00000150401:ENSG00000150403 GeneA:GeneB
#2 ENSG00000185294                 GeneC      
#3 NA                              NA         

這是gsubfn另一個選項

library(gsubfn)
data1$res <- gsubfn("\\w+", setNames(as.list(as.character(data2$c)), 
             data2$b), as.character(data1$a))
data1
#                                a         res
#1 ENSG00000150401:ENSG00000150403 GeneA:GeneB
#2                 ENSG00000185294       GeneC
#3                              NA          NA

base R ,這也可以通過使用strsplit拆分 'a' 列來strsplit ,然后與從第二個數據集的 'b'、'c' 列創建的命名向量進行匹配

is.na(data1$a) <- data1$a == "NA" # converting to real NA instead of character
i1 <- !is.na(data1$a)
# create named vector
v1 <- setNames(as.character(data2$c), data2$b)
data1$res[i1] <- sapply(strsplit(as.character(data1$a[i1]), ":"), 
           function(x) paste(v1[x], collapse=":"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM