Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于多个匹配项修改映射表_R - Fatal编程技术网

R 基于多个匹配项修改映射表

R 基于多个匹配项修改映射表,r,R,我有一个具有此结构的地图表: structure(list(REF_ID = structure(1:10, .Label = c("202533_s_at", "202534_x_at", "202551_s_at", "202552_s_at", "202555_s_at", "202565_s_at", "202566_s_at", "202580_x_at", "202581_at", "202589_at"), class = "factor"), GeneSymb

我有一个具有此结构的地图表:

    structure(list(REF_ID = structure(1:10, .Label = c("202533_s_at",  
"202534_x_at", "202551_s_at", "202552_s_at", "202555_s_at", "202565_s_at",  
"202566_s_at", "202580_x_at", "202581_at", "202589_at"), class = "factor"),  
GeneSymbol = structure(c(2L, 2L, 1L, 1L, 5L, 6L, 6L, 3L, 4L, 7L), .Label =  
c("CRIM1 /// LOC101929500", "DHFR", "FOXM1", "HSPA1A /// HSPA1B", "MYLK",  
"SVIL", "TYMS"), class = "factor")), .Names = c("REF_ID", "GeneSymbol"),  
class = "data.frame", row.names = c(NA, -10L))
在第3、4和9行中,有多个与单个
REF\u ID
匹配的
GeneSymbol
。(此处
/
是分隔符)。因此,在第3行中,两个基因符号与一个
REF\u ID
匹配

我想要一个修改过的表(包括所有现有的映射),这样
REF\u ID
将重复与单独的基因符号匹配的次数。
因此,我希望第3行中有两行单独的条目:一行的
REF_ID==202551_s_at
GeneSymbol==CRIM1
,另一行的
REF_ID==202551_at
GeneSymbol==LOC101929500


你能帮我个忙吗。

下面是你想要的。它只使用基本R,也许在
tidyverse
中有更简单的解决方案

map$GeneSymbol <- as.character(map$GeneSymbol)

out <- lapply(seq_along(map$GeneSymbol), function(i){
    g <- map$GeneSymbol[i]
    if(grepl("///", g)){
        g <- trimws(unlist(strsplit(g, "///")))
        data.frame(REF_ID = rep(map$REF_ID[i], length(g)), GeneSymbol = g)
    } else {
        data.frame(REF_ID = map$REF_ID[i], GeneSymbol = g)
    }

})

map$GeneSymbol <- as.factor(map$GeneSymbol)

out <- do.call(rbind, out)
out
#        REF_ID   GeneSymbol
#1  202533_s_at         DHFR
#2  202534_x_at         DHFR
#3  202551_s_at        CRIM1
#4  202551_s_at LOC101929500
#5  202552_s_at        CRIM1
#6  202552_s_at LOC101929500
#7  202555_s_at         MYLK
#8  202565_s_at         SVIL
#9  202566_s_at         SVIL
#10 202580_x_at        FOXM1
#11   202581_at       HSPA1A
#12   202581_at       HSPA1B
#13   202589_at         TYMS

map$GeneSymbol为了补充Rui Barradas的答案,一种tidyverse方法可能是使用
tidyr
包中包含的
separate_rows()

库(tidyverse)
df%>%单独的行(genesymble,sep=“/”)
#>参考ID GeneSymbol
#>1 202533_s_在DHFR
#>2 202534_x_在DHFR
#>3 202551_s_在克里米亚1
#>4位置101929500处的202551_s_
#>5 202552_s_在克里米亚1
#>6位置101929500处的202552_s_
#>MYLK 202555_s_
#>SVIL 202565_s_
#>9斯维尔202566_s_
#>10 FOXM1处202580_x_
#>HSPA1A的11 202581_
#>HSPA1B的12 202581_
#>TYMS的13 202589_
数据


df非常感谢@芮Barradas@J.Smith我意识到在点击发布后使用
length(g)
可能会改善答案,但后来我认为只有一个
//
,因此
g
总是被一分为二。无论如何,您的编辑确实使答案更一般。谢谢。哇!!!非常感谢。。。