如何匹配R中的列或字符串而不论顺序

时间:2018-09-03 13:09:18

标签: r subset intersection

我试图找到基因共表达网络之间的共同点。这是一个玩具示例:

Dataset 1    Dataset 2    Dataset 3
A:B          A:B          A:B
D:E          NA           D:E

因此,通过相交这些列,A:B是要包括的边,但不是D:E。

我的问题是我的边缘可以左右任意表示:A:B或B:A。我也有A和B作为单独的列。因此,任何一个数据框都将如下所示:

Gene1    Gene2    Edge
A        B        A:B

或者这个:

Gene1    Gene2    Edge
B        A        B:A

这意味着在尝试相交时,您可能会得到类似以下的内容:

Dataset 1    Dataset 2    Dataset 3    Dataset 4    Dataset5
B:A          A:B          A:B          B:A          A:B

匹配字符串将不起作用,因为即使它们之间的关系仍然相同,它们也会被认为是不同的

我如何子集一个数据框,无论我的基因顺序如何,我都可以找到一个基因对?通过查询字符串“ gene1:gene2”或使用具有Gene1名称的列和具有Gene2名称的列。

2 个答案:

答案 0 :(得分:0)

我不知道以下内容是否使您接近所需的内容,但确实可以解决字符串匹配的问题。

overrides.Add(objType, name, ignoreAttribute);

答案 1 :(得分:0)

我不知道你想要什么。这是我的尝试。如果您以相同的方式订购基因,也许会对您有所帮助。

df1 <- 
    structure(list(Dataset1 = c("B:A", "E:A"), Dataset2 = c("A:B", 
                                                            "A:E"), Dataset3 = c("A:B", "A:B"), Dataset4 = c("B:A", "E:A"
                                                            ), Dataset5 = c("A:B", "B:A")), row.names = c(NA, -2L), class = "data.frame")
#      Dataset1 Dataset2 Dataset3 Dataset4 Dataset5
#1      B:A      A:B      A:B      B:A      A:B
#2      E:A      A:E      A:B      E:A      B:A

library(magrittr)
fun1 <- function(x) {
    strsplit(x,":") %>% lapply(sort) %>% lapply(paste0,collapse=":") %>% unlist
}

df1[] %<>% lapply(fun1)

df1
#  Dataset1 Dataset2 Dataset3 Dataset4 Dataset5
#1      A:B      A:B      A:B      A:B      A:B
#2      A:E      A:E      A:B      A:E      A:B