如何在数据框列表中找到常用字符?
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")))
你能帮忙吗?
您的问题似乎有两个方面:
您的一个框架缺少 SNP
作为列名称。这通常会导致问题:
setdiff(mtcars$QUUX, mtcars$cyl)
# NULL
这并不难解决 (names(dflist[[1]]) <- "SNP"
),但并未解决所有问题。
你的第一帧有完全不同的数据。当我跳过第一帧时,它起作用了。
map(dflist[-1], ~.$SNP) %>%
reduce(intersect)
# [1] "rs34394051" "rs11121177" "rs10799615" "rs590013"
我在一个列表中有大约 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")))
你能帮忙吗?
您的问题似乎有两个方面:
您的一个框架缺少
SNP
作为列名称。这通常会导致问题:setdiff(mtcars$QUUX, mtcars$cyl) # NULL
这并不难解决 (
names(dflist[[1]]) <- "SNP"
),但并未解决所有问题。你的第一帧有完全不同的数据。当我跳过第一帧时,它起作用了。
map(dflist[-1], ~.$SNP) %>% reduce(intersect) # [1] "rs34394051" "rs11121177" "rs10799615" "rs590013"