2014-12-04 67 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