楼主:
koai (可笑的自以为...)
2014-08-20 18:27:16依照我对你的问题的理解
把程式做了下面的修改
不知道这是不是你要的
可是结果变得有点不一样了说... @@"
A <- data.frame("gene_a"=c("A","B","C"),"Chrom"=c(1,"X",2),
"gene_s"=c(25000,1000,0),"gene_e"=c(50000,2000,800))
B <- data.frame("Probe_b"=c("a1","a2","a3","a4","a5"),"Chrom2"=c(2,4,1,"X",1),
"chr_s"=c(175,600,23575,1010,30000),"chr_e"=c(200,625,23600,1035,30025))
A
B
C <- list()
for(x in 1:nrow(A)){
idx <-
( is.element(as.character((B$Chrom2)),as.character(A$Chrom[x])) ) &
( B$chr_s >= A$gene_s[x] ) &
( A$gene_e[x] >= B$chr_e )
if(sum(idx)>0){
C[[as.character(A$gene_a[x])]] <- as.character(B$Probe_b[which(idx)])
}
}
C
$A
[1] "a5"
$B
[1] "a4"
$C
[1] "a1"
※ 引述《koai (可笑的自以为...)》之铭言:
: 不是很确定你的资料型态
: 帮你写了下面这个程式让你试试看
: 应该是可以动吧... ^^
: A #左边的资料表
: B #右边的资料表
: A <- data.frame("gene_a"=c("A","B","C"),"Chrom"=c(1,"X",2))
: B <- data.frame("Probe_b"=c("a1","a2","a3","a4","a5"),"Chrom2"=c(2,4,1,"X",1))
: A
: B
: C <- list()
: for(x in 1:nrow(A)){
: C[[as.character(A$gene_a[x])]] <-
: as.character(B$Probe_b[
: which(is.element(as.character((B$Chrom2)),as.character(A$Chrom[x])))
: ])
: }
: ※ 引述《yaowei2010 (yaowei)》之铭言:
: : [问题类型]:
: : 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: : [软件熟悉度]:
: : 新手(没写过程式,R 是我的第一次)
: : [问题叙述]
: : 资料的配对(如范例)
: : [程式范例]:
: : 表格如下
: : gene_a Chromosome gene_start gene_end Probe_b Chromosome2 Chr_s Chr_e
: : A 1 25000 50000 a1 2 175 200
: : B X 1000 2000 a2 4 600 625
: : C 2 0 800 a3 1 23575 23600
: : a4 X 1010 1035
: : a5 1 30000 30025
: : 最后想变成这样
: : gene_a match
: : A a3 a5
: : B a4
: : C a1
: : 有试着写过code
: : 但gg QAQ
: : 想问问强者怎么写? 或提示
: : 程式码可贴于以下网站:
: : http://ideone.com/
: : http://codepad.org
: : http://pastie.org/
: : http://nopaste.info/
: : http://pastebin.com/
: : http://paste.plurk.com
: : http://gist.github.com/
: : http://nopaste.csie.org/
: : → yaowei2010: 两个资料 08/20 16:59
: : → yaowei2010: (注 08/20 16:59