在R中操作数据库
我是R方面的新手,我想用R中的数据做点什么。 有谁能帮我在R中实现这个吗 我有如下的数据矩阵(mydata1),我想从第二个数据库中为它添加第二列 我的第一个数据矩阵如下所示:在R中操作数据库,r,R,我是R方面的新手,我想用R中的数据做点什么。 有谁能帮我在R中实现这个吗 我有如下的数据矩阵(mydata1),我想从第二个数据库中为它添加第二列 我的第一个数据矩阵如下所示: > mydata1[1:4,1:3] Gene ID lung.cancer lung.cancer.1 lung.cancer.2 hsa-miR-616* 3.653241 1.00000 1.838179 hsa-miR-1296 2.68
> mydata1[1:4,1:3]
Gene ID lung.cancer lung.cancer.1 lung.cancer.2
hsa-miR-616* 3.653241 1.00000 1.838179
hsa-miR-1296 2.688751 36.12798 43.823880
hsa-miR-338-5p 29.893947 2.21830 48.048856
hsa-miR-452* 5.693279 1015.58508 35.165157
>
我的第二个数据库是:
> Database
ENS ID Gene ID
ENSG00000221263 hsa-mir-548p
ENSG00000207941 hsa-miR-616
ENSG00000207800 hsa-mir-504
ENSG00000222831 hsa-mir-1537
ENSG00000207582 hsa-mir-30b
ENSG00000199153 hsa-miR-338-5p
ENSG00000215998 hsa-mir-935
ENSG00000207804 hsa-mir-599
我想为我的第一个数据矩阵(mydata1
)在名为ENS ID
的Gene ID
之后添加新列,
它从mydata1
中获取基因ID,并在数据库中搜索它,如果找到它,则将其对应的ensID
添加到新列中的mydata1
预期输出如下所示:
Gene ID ENS ID lung.cancer lung.cancer.1 lung.cancer.2
hsa-miR-616* ENSG00000207941 5.653241 1.00000 1.838179
hsa-miR-1296 7.688751 36.12798 3.823880
hsa-miR-338-5p ENSG00000199153 29.893947 42.21830 8.048856
hsa-miR-452* 52.693279 115.58508 15.165157
假设您的类(数据库)=矩阵,类(mydata)=矩阵,并且所有列都是字符类
temp=numeric(nrow(Database))
for( i in 1:nrow(Database)){
ind=which(Database[,2]==mydata[,1])
if(length(ind)!=0){
temp[ind]=Database[,1][ind]
}
}
cbind(mydata[,1],temp,mydata[,2],mydata[,3])
将提供您所需的内容我之所以这样做是因为@user2806363无法理解其含义
> mydata1[,1] <- sub("\\*","",mydata1[,1])
> dput(mydata1)
structure(list(Gene_ID = c("hsa-miR-616", "hsa-miR-1296", "hsa-miR-338-5p",
"hsa-miR-452"), lung.cancer = c(3.653241, 2.688751, 29.893947,
5.693279), lung.cancer.1 = c(1, 36.12798, 2.2183, 1015.58508),
lung.cancer.2 = c(1.838179, 43.82388, 48.048856, 35.165157
)), .Names = c("Gene_ID", "lung.cancer", "lung.cancer.1",
"lung.cancer.2"), row.names = c(NA, -4L), class = "data.frame")
> dput(Database)
structure(list(ENS_ID = structure(c(7L, 5L, 3L, 8L, 2L, 1L, 6L,
4L), .Label = c("ENSG00000199153", "ENSG00000207582", "ENSG00000207800",
"ENSG00000207804", "ENSG00000207941", "ENSG00000215998", "ENSG00000221263",
"ENSG00000222831"), class = "factor"), Gene_ID = structure(c(5L,
7L, 4L, 1L, 2L, 3L, 8L, 6L), .Label = c("hsa-mir-1537", "hsa-mir-30b",
"hsa-miR-338-5p", "hsa-mir-504", "hsa-mir-548p", "hsa-mir-599",
"hsa-miR-616", "hsa-mir-935"), class = "factor")), .Names = c("ENS_ID",
"Gene_ID"), class = "data.frame", row.names = c(NA, -8L))
> merge(mydata1, Database)
Gene_ID lung.cancer lung.cancer.1 lung.cancer.2 ENS_ID
1 hsa-miR-338-5p 29.893947 2.2183 48.048856 ENSG00000199153
2 hsa-miR-616 3.653241 1.0000 1.838179 ENSG00000207941
> merge(mydata1, Database, all.x=TRUE)
Gene_ID lung.cancer lung.cancer.1 lung.cancer.2 ENS_ID
1 hsa-miR-1296 2.688751 36.12798 43.823880 <NA>
2 hsa-miR-338-5p 29.893947 2.21830 48.048856 ENSG00000199153
3 hsa-miR-452 5.693279 1015.58508 35.165157 <NA>
4 hsa-miR-616 3.653241 1.00000 1.838179 ENSG00000207941
>
mydata1[,1]dput(mydata1)
结构(列表(基因ID=c(“hsa-miR-616”、“hsa-miR-1296”、“hsa-miR-338-5p”),
“hsa-miR-452”),肺癌=c(3.653241,2.688751,29.893947,
肺癌1=c(1,36.12798,2.2183,1015.58508),
肺癌2=c(1.838179,43.82388,48.048856,35.165157
)),.Names=c(“基因ID”,“肺癌”,“肺癌.1”,
“lung.cancer.2”,row.names=c(NA,-4L),class=“data.frame”)
>dput(数据库)
结构(列表)(ENS_ID=结构(c)(7L、5L、3L、8L、2L、1L、6L、,
4L),.Label=c(“ENG00000199153”、“ENG00000207582”、“ENG00000207800”,
“ENG00000207804”、“ENG00000207941”、“ENG00000215998”、“ENG00000221263”,
“ENSG000022831”,class=“factor”),基因ID=结构(c(5L,
7L,4L,1L,2L,3L,8L,6L),标签=c(“hsa-mir-1537”,“hsa-mir-30b”,
“hsa-miR-338-5p”、“hsa-miR-504”、“hsa-miR-548p”、“hsa-miR-599”,
“hsa-miR-616”,“hsa-miR-935”,class=“factor”),.Names=c(“ENS_ID”,
“Gene_ID”),class=“data.frame”,row.names=c(NA,-8L))
>合并(mydata1,数据库)
基因识别肺癌肺癌1肺癌2 ENS识别
1 hsa-miR-338-5p 29.893947 2.2183 48.048856 ENSG0000199153
2 hsa-miR-616 3.653241 1.0000 1.838179 ENSG0000207941
>合并(mydata1,数据库,all.x=TRUE)
基因识别肺癌肺癌1肺癌2 ENS识别
1 hsa-miR-1296 2.688751 36.12798 43.823880
2 hsa-miR-338-5p 29.893947 2.21830 48.048856 ENSG0000199153
3 hsa-miR-452 5.693279 1015.58508 35.165157
4 hsa-miR-616 3.653241 1.000001.838179 ENSG0000207941
>
@Thomas,这不一样,我已经看过了。答案是合并
函数。肯定有上百个类似的问题。@user2806363“duplicate”在这里的定义比在现实世界中要宽松得多。@Dwinmerge
,就像我发布的问题中接受答案的第一个解决方案一样。是的。显然需要逐步应用cluestick。