首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个数据帧中找到通用和唯一的元素

如何在多个数据帧中找到通用和唯一的元素
EN

Stack Overflow用户
提问于 2022-06-09 12:50:58
回答 1查看 54关注 0票数 1

Objective来查看常见的元素,即我的行,它们基本上是我的不同比较中的基因名称。

这就是我试图遵循的answer

代码语言:javascript
复制
df1 = data.frame(genes = c('gene1', 'gene3', 'gene4', 'gene2'))
df2 = data.frame(genes = c('gene3', 'gene2', 'gene5', 'gene1', "genet"))
df3 = data.frame(genes = c('gene6', 'gene3', 'gene4', 'gdene7', 'genex', "gene10"))
dfList <- list(df1, df2, df3) 

reduce(dfList, inner_join)
reduce(dfList, inner_join)
Joining, by = "genes"
Joining, by = "genes"
  genes
1 gene3

这在这种情况下失败了。

代码语言:javascript
复制
    df1 = data.frame(genes = c('gene1', 'gene3', 'gene4', 'gene2'))
    df2 = data.frame(genes = c('gene3', 'gene2', 'gene5', 'gene1', "genet"))
    df3 = data.frame(genes = c('gene6', 'gene13', 'gene4', 'gdene7', 'genex', "gene10"))
    dfList <- list(df1, df2, df3) 
    
    reduce(dfList, inner_join)

educe(dfList, inner_join)
Joining, by = "genes"
Joining, by = "genes"
[1] genes
<0 rows> (or 0-length row.names)

现在如何解决这个问题。我给了一个小的,我有15个比较。

代码语言:javascript
复制
Expected output 
  gene3   df1 df2 df3 ## for common genes

gene1  df1 df2  ## for genes which arr not across all the combination 
gene2  

在第一种情况下,解决方案在所有情况下都是预先设置的gene3,但在只有2种情况下出现时失败。

那么,我如何找出所有可能的组合,当基因在不同的可能组合中存在时。

例如,如果、gene3、都存在,那么它是报告的,但是在df1df2中存在gene1和gene2,但是没有报告这些。

因此,我想看看一组基因是否存在于所有条件下,这些基因最不可能存在,而是存在于其存在的所有可能的组合中。

我的实际数据文件就是这样命名的,它位于列表中。

代码语言:javascript
复制
names(result_abd)
 [1] "M0_vs_M1_TCGA_stages" "M0_vs_M2_TCGA_stages" "M0_vs_M3_TCGA_stages" "M0_vs_M4_TCGA_stages" "M0_vs_M5_TCGA_stages" "M1_vs_M2_TCGA_stages"
 [7] "M1_vs_M3_TCGA_stages" "M1_vs_M4_TCGA_stages" "M1_vs_M5_TCGA_stages" "M2_vs_M3_TCGA_stages" "M2_vs_M4_TCGA_stages" "M2_vs_M5_TCGA_stages"
[13] "M3_vs_M4_TCGA_stages" "M3_vs_M5_TCGA_stages" "M4_vs_M5_TCGA_stages"
> 

所以我希望每一次数据都有15列

我运行了您的代码,输出如下

代码语言:javascript
复制
dput(head(a))
structure(list(gene = c("ENSG00000000003", "ENSG00000000971", 
"ENSG00000002726", "ENSG00000003989", "ENSG00000005381", "ENSG00000006534"
), dfM0_vs_M1_TCGA_stages = c("M0_vs_M1_TCGA_stages", "M0_vs_M1_TCGA_stages", 
"M0_vs_M1_TCGA_stages", "M0_vs_M1_TCGA_stages", "M0_vs_M1_TCGA_stages", 
"M0_vs_M1_TCGA_stages"), dfM0_vs_M2_TCGA_stages = c(NA, "M0_vs_M2_TCGA_stages", 
"M0_vs_M2_TCGA_stages", NA, "M0_vs_M2_TCGA_stages", NA), dfM0_vs_M3_TCGA_stages = c("M0_vs_M3_TCGA_stages", 
"M0_vs_M3_TCGA_stages", "M0_vs_M3_TCGA_stages", NA, "M0_vs_M3_TCGA_stages", 
NA), dfM0_vs_M4_TCGA_stages = c("M0_vs_M4_TCGA_stages", NA, "M0_vs_M4_TCGA_stages", 
NA, "M0_vs_M4_TCGA_stages", "M0_vs_M4_TCGA_stages"), dfM0_vs_M5_TCGA_stages = c("M0_vs_M5_TCGA_stages", 
NA, "M0_vs_M5_TCGA_stages", NA, "M0_vs_M5_TCGA_stages", "M0_vs_M5_TCGA_stages"
), dfM1_vs_M2_TCGA_stages = c(NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), dfM1_vs_M3_TCGA_stages = c(NA, 
NA, NA, NA, "M1_vs_M3_TCGA_stages", NA), dfM1_vs_M4_TCGA_stages = c(NA, 
"M1_vs_M4_TCGA_stages", NA, NA, NA, NA), dfM1_vs_M5_TCGA_stages = c(NA, 
NA, "M1_vs_M5_TCGA_stages", NA, NA, NA), dfM2_vs_M3_TCGA_stages = c(NA, 
NA, NA, NA, "M2_vs_M3_TCGA_stages", NA), dfM2_vs_M4_TCGA_stages = c(NA, 
"M2_vs_M4_TCGA_stages", NA, NA, NA, NA), dfM2_vs_M5_TCGA_stages = c(NA, 
NA, "M2_vs_M5_TCGA_stages", NA, "M2_vs_M5_TCGA_stages", NA), 
    dfM3_vs_M4_TCGA_stages = c(NA, "M3_vs_M4_TCGA_stages", NA, 
    NA, "M3_vs_M4_TCGA_stages", NA), dfM3_vs_M5_TCGA_stages = c(NA, 
    "M3_vs_M5_TCGA_stages", NA, NA, "M3_vs_M5_TCGA_stages", NA
    ), dfM4_vs_M5_TCGA_stages = c(NA, NA, "M4_vs_M5_TCGA_stages", 
    NA, NA, NA)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

Dataframe格式

代码语言:javascript
复制
 A tibble: 6 × 16
  gene            dfM0_vs_M1_TCGA… dfM0_vs_M2_TCGA… dfM0_vs_M3_TCGA… dfM0_vs_M4_TCGA… dfM0_vs_M5_TCGA… dfM1_vs_M2_TCGA… dfM1_vs_M3_TCGA… dfM1_vs_M4_TCGA…
  <chr>           <chr>            <chr>            <chr>            <chr>            <chr>            <chr>            <chr>            <chr>           
1 ENSG00000000003 M0_vs_M1_TCGA_s… NA               M0_vs_M3_TCGA_s… M0_vs_M4_TCGA_s… M0_vs_M5_TCGA_s… NA               NA               NA              
2 ENSG00000000971 M0_vs_M1_TCGA_s… M0_vs_M2_TCGA_s… M0_vs_M3_TCGA_s… NA               NA               NA               NA               M1_vs_M4_TCGA_s…
3 ENSG00000002726 M0_vs_M1_TCGA_s… M0_vs_M2_TCGA_s… M0_vs_M3_TCGA_s… M0_vs_M4_TCGA_s… M0_vs_M5_TCGA_s… NA               NA               NA              
4 ENSG00000003989 M0_vs_M1_TCGA_s… NA               NA               NA               NA               NA               NA               NA              
5 ENSG00000005381 M0_vs_M1_TCGA_s… M0_vs_M2_TCGA_s… M0_vs_M3_TCGA_s… M0_vs_M4_TCGA_s… M0_vs_M5_TCGA_s… NA               M1_vs_M3_TCGA_s… NA              
6 ENSG00000006534 M0_vs_M1_TCGA_s… NA               NA               M0_vs_M4_TCGA_s… M0_vs_M5_TCGA_s… NA               NA               NA   

这就是我想要的。下一步作为我想要看到的例子

如果我认为这种基因ENSG00000000971存在于7种比较中,而在其他被报道为NA.How的地方则不存在,我就将它们分组。

就像用这些基因构建另一个数据框架一样,我们可以说,在多重比较中,这些基因是存在的,而不包括在这是NA的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-09 13:04:03

我不清楚您希望如何格式化您的文件(几个索引列或一个包含字符串或列表列的列)。但这里有一个选择。首先,我将您的数据名列表合并到一个数据框架中,并有一个指示源的索引。

代码语言:javascript
复制
library(tidyverse)

dfList <- list(df1, df2, df3) 

dfList %>% 
  bind_rows(.id="df") %>% 
  pivot_wider(names_from=df, names_prefix="df", values_from=df) 
# A tibble: 10 × 4
   genes  df1   df2   df3  
   <chr>  <chr> <chr> <chr>
 1 gene1  1     2     NA   
 2 gene3  1     2     3    
 3 gene4  1     NA    3    
 4 gene2  1     2     NA   
 5 gene5  NA    2     NA   
 6 genet  NA    2     NA   
 7 gene6  NA    NA    3    
 8 gdene7 NA    NA    3    
 9 genex  NA    NA    3    
10 gene10 NA    NA    3    

以下是对执行部分问题的补充。(不过请注意,这实际上是一个新问题,应该是一个新帖子。)

代码语言:javascript
复制
dfList %>% 
  bind_rows(.id="df") %>% 
  group_by(genes) %>% 
  summarise(minDF=min(df), maxDF=max(df)) %>% 
  filter(minDF == maxDF & maxDF == 3) %>% 
  pull(genes)
[1] "gdene7" "gene10" "gene6"  "genex" 

再一次,关键是将所有数据放到一个数据帧中。(所需的输出格式不清楚。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72560613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档