我有多個具有以下格式的資料框:
Gene Entrez.Id Dataset Correlation
1 MTHFD2 10797 CRISPR (DepMap 22Q1 Public Score, Chronos) 0.3328479
2 SLC25A32 81034 CRISPR (DepMap 22Q1 Public Score, Chronos) 0.3111028
3 MTHFD1L 25902 CRISPR (DepMap 22Q1 Public Score, Chronos) 0.2710356
4 DTX3 196403 CRISPR (DepMap 22Q1 Public Score, Chronos) 0.2672314
我的目標是在Gene列中找到所有資料幀共有的元素,為此我使用了以下命令:
df.join <- join_all(list(df1,df2,df3,df4,df5), by = "Gene", type = "inner")
但實際上沒有Gene所有資料幀共有的元素,所以df.join是空的。現在我想知道Gene列中是否有大多數資料框共有的元素,但不是全部,比如說 5 個中的 4 個。有沒有一種方法可以在不為所有可能的資料組合手動構建代碼行的情況下做到這一點幀?
uj5u.com熱心網友回復:
一個選項涉及dplyr并且purrr可能是:
ids_to_join <- mget(ls(pattern = "df")) %>%
map_dfr(~ select(., "Gene"), .id = "dataset") %>%
group_by(Gene) %>%
summarise(n = n_distinct(dataset)) %>%
ungroup() %>%
filter(n == 5) %>% #The number corresponds to the required number of datasets
pull(Gene)
mget(ls(pattern = "df")) %>%
map(~ filter(., Gene %in% ids_to_join)) %>%
reduce(inner_join,
by = "Gene")
在這種方法中,標識了所需數量的資料集(這里 n = 5)中存在的 ID。然后,在第二步中,這些 ID 被過濾掉并連接在一起。
如果還需要有關資料集的資訊:
ids_to_join <- mget(ls(pattern = "df")) %>%
map_dfr(~ select(., "Gene"), .id = "dataset") %>%
group_by(Gene) %>%
summarise(n = n_distinct(dataset),
dataset = paste(dataset, collapse = ", ")) %>%
ungroup() %>%
filter(n == 5) %>%
select(-n)
mget(ls(pattern = "df")) %>%
map(~ filter(., Gene %in% ids_to_join[["Gene"]])) %>%
reduce(inner_join,
by = "Gene") %>%
left_join(ids_to_join,
by = "Gene")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453438.html
