2014-12-04 70 views
0
k=seq(10100,249250621,10) 

    a =data.frame(nrow=300000,ncol=5) #like this format: 

    chr1 100000851 + 2 100000925 

    chr1 100001273 + 3 100001347 

.............................. 

1.Now我想計算:[R計算大數據流通

爲每a[i,5],搜索k[j]可能在區間使a[i,5]

(k[j]-75,k[j]+75) 

然後合併一個new data.frame(),make a[i,6]=k[j]

2.我寫了兩個代碼,但我不知道我在哪裏錯了:

1) 

    b=function(x){ 

    x1=a[which(a[,5]-(x-75)>0&a[,5]-(x+75)<0,] 

    x2=cbind(x1,x) 

    } 

    c=apply(k,1,function(x)a(x)) 

    2) 

    for(i in 1:length(k)){ 

     if(length(N1<-which(a[,5]-(k-75)>0&a[,5]-(k+75)<0))>0){ 

     for(j in N1){ 

      x1=cbind(k,a[j,]) 

      x2=rbind(x2,x1) 

     } 

     } 

     } 

但他們都錯了。

任何人給予建議可能是非常感激!

+0

如果兩個沒有「K」的比賽條件會發生什麼或?你能舉一個例子「a [,5]」和「k」來考慮任何約束嗎?作爲開始,似乎你可以嘗試像sapply(a [,5],function(x)k [x> =(k-75)&x <=(k + 75)])? – 2014-12-04 15:55:43

+0

謝謝。 @ alexis_laz#例如,應該有'k'可以匹配條件,如果有多於兩個k匹配,則將每個k組合爲構造新的data.frame()。 'kr1 100000851 + 2 100000925 100000925(k)''chr1 100000851 + 2 100000925 100000935(k)''chr1 100000851 + 2 100000925 100000945(k)''chr1 100000851 + 2 100000925 100000955(k)' – 2014-12-05 00:53:04

+0

您能否給我一些建議嗎?這些讓我很困惑。 – 2014-12-05 05:08:30

回答

0

從我從註釋中得到的,像下面這樣應該會有所幫助:

#sample "a" and "k" 
a = data.frame(col1 = paste("chr", rep(1:2, 2), sep = ""), col2 = sample(4), 
       col3 = "+", col4 = 1:4, col5 = c(215, 502, 345, 1007)) 
a 
k = c(200, 300, 400, 500, 800, 1000) 

a[[6]] = sapply(a[[5]], function(x) 
          paste(k[x >= (k - 75) & x <= (k + 75)], collapse = ", ")) 
a 
# col1 col2 col3 col4 col5  V6 
#1 chr1 4 + 1 215  200 
#2 chr2 2 + 2 502  500 
#3 chr1 3 + 3 345 300, 400 
#4 chr2 1 + 4 1007  1000 
+0

太棒了!非常感謝。但是,你能告訴我你怎麼看待trans'a'(這是一個data.frame)到列表中?我的意思是[[6]],這是一個列表。就我而言,我認爲'a'只是一個數據框。此外,還有什麼使用'粘貼'功能來結合所有結果的嗎? – 2014-12-05 13:47:35

+0

@flybird:參見'is.list(a)'和'unclass(a)'; 「data.frame」是一個特殊處理和格式化的「列表」,具有相同長度的元素。所以,可以使用a [[5]]和'$ col5'; 'a [,5]'是「data.frame」的一個方便的「類矩陣」操作符。 「粘貼」是將元素合併爲一個的最常見功能;它與'c' /'rbind' /'cbind'的不同之處在於它返回一個字符向量(有時候不需要/有用)。而不是'粘貼',你可以有兩列「k」s,其中只有一個「k」的「a [,5]」在第二列中有一個「NA」。這一切都歸結於特定的需求。 – 2014-12-05 13:57:55

+0

謝謝! @ alexis_laz。現在我知道了data.frame.的特殊性質,但是當我使用你告訴我的方法時,代碼已經運行了一天,直到現在它並沒有停止。於是我手動停止了它。他們遇到了什麼?'k'是seq(10100,249250621,10)。 – 2014-12-07 10:55:03