如何在数据框列表中找到常用字符?

How do I find common characters in a list of dataframes?

我在一个列表中有大约 70 个数据帧,每个数据帧都有一个名为 SNP 的列。我想找到存在于所有数据帧中的常见 SNP。这是我使用的代码:

setwd("~")
library(data.table)

files <- list.files()
dflist <- list()
for(i in 1:length(files)){
 dflist[[i]] <- fread(files[i])
}

map(dflist, ~.$SNP) %>% 
reduce(intersect) 

但是,这 returns 以下消息:

character(0)
list(structure(list(`10:103391446` = c("10:115562764:TTTC_",
"10:115562765:TTC_T", "10:14188623_CCTGA_C", "10:15988900:G_GGT"
)), row.names = c(NA, -4L), class = c("data.table", "data.frame"
)), structure(list(SNP = c("rs34394051",
"rs11121177", "rs10799615", "rs590013")), row.names = c(NA, -4L
), class = c("data.table", "data.frame")),
    structure(list(SNP = c("rs34394051", "rs11121177", "rs10799615",
    "rs590013")), row.names = c(NA, -4L), class = c("data.table",
    "data.frame")))

你能帮忙吗?

您的问题似乎有两个方面:

  1. 您的一个框架缺少 SNP 作为列名称。这通常会导致问题:

    setdiff(mtcars$QUUX, mtcars$cyl)
    # NULL
    

    这并不难解决 (names(dflist[[1]]) <- "SNP"),但并未解决所有问题。

  2. 你的第一帧有完全不同的数据。当我跳过第一帧时,它起作用了。

    map(dflist[-1], ~.$SNP) %>%
      reduce(intersect)
    # [1] "rs34394051" "rs11121177" "rs10799615" "rs590013"