首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据行内容对两个大小不等的数据帧进行排序和对齐

如何根据行内容对两个大小不等的数据帧进行排序和对齐
EN

Stack Overflow用户
提问于 2019-07-11 08:03:56
回答 1查看 146关注 0票数 0

我有两个差异蛋白表达实验的结果,这两个实验是UniProtKB ID。我使用Biomart将这些I与基因名称进行匹配,但并不是所有的I都与基因名称匹配。我希望将这些数据和原始UniprotKB列表组合在一起,并按UniprotKB ID对齐,以生成单个数据集。这是我第一次使用R来做这种类型的分析,所以非常感谢所有的建议/代码示例。

数据帧1

Gene_1  ID_1
Gdi2    G3GR73
Pitrm1  G3GR85
    G3GRA0
Tmem43  G3GS14
Tmf1    G3GS63
Ddx3x   G3GSH5
Bdh1    G3GSJ7
Pak2    G3GSK4
Tfrc    G3GSM5
Umps    G3GSP0
Gart    G3GT56
Pgm3    G3GTC9
Cpt2    G3GTN3
Vps26b  G3GTV9
Mthfd1l G3GU10
Rbm19   G3GU41
    G3GU60
Prkab1  G3GU67
Tigar   G3GUK0

数据帧2

Gene_2  ID_2
Bak1    A1E3K4
Pitrm1  G3GR85
Gtpbp4  G3GR93
Lbr G3GRA0
Tmem43  G3GS14
Tmf1    G3GS63
Ddx3x   G3GSH5
Bdh1    G3GSJ7
Tfrc    G3GSM5
Umps    G3GSP0
Gart    G3GT56
Pgm3    G3GTC9
Grb2    G3GTE4
Cpt2    G3GTN3
Vps26b  G3GTV9
Mthfd1l G3GU10
Rbm19   G3GU41
    G3GU60
Prkab1  G3GU67

原始数据

ID_3
A1E3K4
G3GR73
G3GR85
G3GR93
G3GRA0
G3GRB1
G3GRB9
G3GRD8
G3GRE1
G3GRM2
G3GRT0
G3GRW3
G3GRX2
G3GS14
G3GS63
G3GS70
G3GS82
G3GSH2
G3GSH5

我尝试过cbind和match_order函数,但它们并不能完全满足我的要求。我还尝试从2个数据集创建数据帧,但无法创建,因为它们的大小不同。

joint <- data.frame(ori$ID_3, df_1$ID_1, df_1$Gene_1)

data.frame(ori$ID_3,df_1$ID_1,df_1$Gene_1)中的

错误:参数隐含不同的行数: 1255,544

目标是为数据集3中的所有大约1300个条目生成类似这样的结果

Gene_1  ID_1    Gene_2  ID_2    ID_3
        Bak1    A1E3K4  A1E3K4
Gdi2    G3GR73          G3GR73
Pitrm1  G3GR85  Pitrm1  G3GR85  G3GR85
        Gtpbp4  G3GR93  G3GR93
    G3GRA0  Lbr G3GRA0  G3GRA0
                G3GRB1
                G3GRB9
                G3GRD8
                G3GRE1
                G3GRM2
                G3GRT0
                G3GRW3
                G3GRX2
Tmem43  G3GS14  Tmem43  G3GS14  G3GS14
Tmf1    G3GS63  Tmf1    G3GS63  G3GS63
                G3GS70
                G3GS82
                G3GSH2
Ddx3x   G3GSH5  Ddx3x   G3GSH5  G3GSH5
                G3GSJ5
Bdh1    G3GSJ7  Bdh1    G3GSJ7  G3GSJ7
Pak2    G3GSK4          G3GSK4
                G3GSL6
Tfrc    G3GSM5  Tfrc    G3GSM5  G3GSM5

这是我第一次使用R来做这种类型的分析,所以非常感谢所有的建议/代码示例。

更新1

基于Stewarts的代码和建议,我得出了以下结论。文件1有2列和544个观察值,文件2有2列和419个观察值,文件3有1254个观察值。文件已正确连接,但最终文件只有33个观测值,而不是1254个。

getwd()

file1 <- read.csv("cigr_db.csv", sep=",", header=T)

file2 <- read.csv("picr_db.csv", sep=",", header=T)

file3 <- read.csv("progen_data.csv", sep=",", header=T)

# Change the ID column name to be the same in each dataframe, so we can match on it
colnames(file1)[2] <- 'ID'
colnames(file2)[2] <- 'ID'
colnames(file3)[1] <- 'ID'
v <- plyr::join(df1, df2, type='full')
v <- plyr::join(v, df3, type='full')

v

write.csv(v, file = "all_condt.csv")````
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 08:42:47

如果这三个列都包含相同的值,那么是否需要复制ID_X列?如果没有,您可以使用plyr包中的join函数:

library(plyr)

file1 <- 'Gene_1,ID_1
Gdi2,G3GR73
Pitrm1,G3GR85
,G3GRA0
Tmem43,G3GS14
Tmf1,G3GS63
Ddx3x,G3GSH5
Bdh1,G3GSJ7
Pak2,G3GSK4
Tfrc,G3GSM5
Umps,G3GSP0
Gart,G3GT56
Pgm3,G3GTC9
Cpt2,G3GTN3
Vps26b,G3GTV9
Mthfd1l,G3GU10
Rbm19,G3GU41
,G3GU60
Prkab1,G3GU67
Tigar,G3GUK0'

df1 <- read.table(textConnection(file1), sep=",", header=T)

file2 <- 'Gene_2,ID_2
Bak1,A1E3K4
Pitrm1,G3GR85
Gtpbp4,G3GR93
Lbr,G3GRA0
Tmem43,G3GS14
Tmf1,G3GS63
Ddx3x,G3GSH5
Bdh1,G3GSJ7
Tfrc,G3GSM5
Umps,G3GSP0
Gart,G3GT56
Pgm3,G3GTC9
Grb2,G3GTE4
Cpt2,G3GTN3
Vps26b,G3GTV9
Mthfd1l,G3GU10
Rbm19,G3GU41
,G3GU60
Prkab1,G3GU67'

df2 <- read.table(textConnection(file2), sep=",", header=T)

file3 <- 'ID_3
A1E3K4
G3GR73
G3GR85
G3GR93
G3GRA0
G3GRB1
G3GRB9
G3GRD8
G3GRE1
G3GRM2
G3GRT0
G3GRW3
G3GRX2
G3GS14
G3GS63
G3GS70
G3GS82
G3GSH2
G3GSH5'

df3 <- read.table(textConnection(file3), sep=",", header=T)

# Change the ID column name to be the same in each dataframe, so we can match on it
colnames(df1)[2] <- 'ID'
colnames(df2)[2] <- 'ID'
colnames(df3)[1] <- 'ID'
v <- plyr::join(df1, df2, type='full')
v <- plyr::join(v, df3, type='full')

这就给出了:

> v
    Gene_1     ID  Gene_2
1     Gdi2 G3GR73    <NA>
2   Pitrm1 G3GR85  Pitrm1
3          G3GRA0     Lbr
4   Tmem43 G3GS14  Tmem43
5     Tmf1 G3GS63    Tmf1
6    Ddx3x G3GSH5   Ddx3x
7     Bdh1 G3GSJ7    Bdh1
8     Pak2 G3GSK4    <NA>
9     Tfrc G3GSM5    Tfrc
10    Umps G3GSP0    Umps
11    Gart G3GT56    Gart
12    Pgm3 G3GTC9    Pgm3
13    Cpt2 G3GTN3    Cpt2
14  Vps26b G3GTV9  Vps26b
15 Mthfd1l G3GU10 Mthfd1l
16   Rbm19 G3GU41   Rbm19
17         G3GU60        
18  Prkab1 G3GU67  Prkab1
19   Tigar G3GUK0    <NA>
20    <NA> A1E3K4    Bak1
21    <NA> G3GR93  Gtpbp4
22    <NA> G3GTE4    Grb2
23    <NA> G3GRB1    <NA>
24    <NA> G3GRB9    <NA>
25    <NA> G3GRD8    <NA>
26    <NA> G3GRE1    <NA>
27    <NA> G3GRM2    <NA>
28    <NA> G3GRT0    <NA>
29    <NA> G3GRW3    <NA>
30    <NA> G3GRX2    <NA>
31    <NA> G3GS70    <NA>
32    <NA> G3GS82    <NA>
33    <NA> G3GSH2    <NA>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56980062

复制
相关文章

相似问题

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