繁体   English   中英

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

[英]How to match columns or strings in R regardless of order

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

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名称的列。

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

Dataset1 <- data.frame(Edge = c("A:B", "D:E"))
Dataset2 <- data.frame(Edge = c("A:B", NA))
Dataset3 <- data.frame(Edge = c("A:B", "D:E"))

splitSort <- function(x, split = ":"){
  x <- as.character(x)
  x <- strsplit(x, split)
  x <- lapply(x, function(y) paste(sort(y), collapse = split))
  unlist(x)
}

e1 <- splitSort(Dataset1$Edge)
e2 <- splitSort(Dataset2$Edge)
e3 <- splitSort(Dataset3$Edge)
r <- Reduce(function(x, y) intersect(x, y), list(e1, e2, e3))

i <- which(Dataset2$Edge %in% r)
Dataset2[i, , drop = FALSE]
#  Edge
#1  A:B

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM