依照我對你的問題的理解
把程式做了下面的修改
不知道這是不是你要的
可是結果變得有點不一樣了說... @@"
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