【问题标题】:Joining a list of data.frames with intersected genes and redundant columns into a single unique data.frame将具有相交基因和冗余列的 data.frames 列表连接到一个唯一的 data.frame 中
【发布时间】:2019-04-17 04:33:34
【问题描述】:

我有一个 listdata.frames。一些data.frames 是冗余的,在非冗余行中,行(由id 列表示)不相同但重叠:

set.seed(2)
ids.1.2 <- paste0("id",sample(30,10,replace = F))
ids.3.4 <- paste0("id",sample(30,20,replace = F))

df.1 <- data.frame(id = ids.1.2,matrix(rnorm(100),10,10,dimnames = list(NULL,paste0("s.1.2:",1:10))))
df.2 <- df.1
df.3 <- data.frame(id = ids.3.4,matrix(rnorm(300),20,15,dimnames = list(NULL,paste0("s.3.4:",1:15))))
df.4 <- df.3

df.list <- list(df.1, df.2, df.3, df.4)

所以在这种情况下,df.1df.2 是相同的,df.3df.4 也是相同的,并且这两个集合在 ids 上相交:

"id6"  "id21" "id17" "id5"  "id24" "id11" "id12

是否有purrr::reduce 或类似的方法可以将此列表组合成一个具有唯一列和相交iddata.frame

我会使用:

purrr::reduce(df.list, dplyr::inner_join,by = "id")

如果所有data.frames 都有唯一的列。但在我的情况下,使用这个添加 .x, .y, ... 就足够了冗余列。

【问题讨论】:

  • 也许删除 by = "id" 并依赖默认行为,即使用所有具有通用名称的变量。

标签: r reduce purrr


【解决方案1】:

我不确定这是否是你想要的,但我会先删除相同的数据框,然后再合并其余的。这不是一个很好的解决方案,你可以在这里和那里调整它,但如果我做对了,它会给你你想要的结果。您可能希望在 combinations 数据框中包含删除相同组合的行,以便确保从列表中删除相同的 dfs 时没有错误。

library(tidyr)
library(dplyr)

# create all possible combinations
names(df.list) <- 1:length(df.list)
combinations <- crossing(names(df.list), names(df.list))
colnames(combinations) <- c("v1", "v2")

# remove self-combinations
combinations <- combinations[!combinations$v1 == combinations$v2,]

# check which cases are identical
combinations$check <- sapply(1:nrow(combinations), function(x){combinations[x,] <- identical(df.list[[combinations$v1[x]]], df.list[[combinations$v2[x]]])})
combinations <- combinations[combinations$check == T,]

# remove identical cases
for(i in 1:length(df.list)){
  if(combinations$v1[i] == names(df.list)[i] & combinations$v1[i] %in% names(df.list)){df.list[i] <- NULL}

}

# combine dataframes
bind_rows(df.list)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多