Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中操作数据库_R - Fatal编程技术网

在R中操作数据库

在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

我是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.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”在这里的定义比在现实世界中要宽松得多。@Dwin
merge
,就像我发布的问题中接受答案的第一个解决方案一样。是的。显然需要逐步应用cluestick。