2015-07-01 81 views
-1

我对编码在R中是绝对全新的 - 实际上编码一般,所以请原谅我的无知。R:通过数据范围计算百分比 - 创建bin

我有一个数据文件,具有不同长度的特征的“开始”和“结束”位置值。我想输出一个文件,该文件根据特征的长度(1 - 100%)按百分比为每个特征(数据行)创建分栏。

我认为这基本上回答了这个问题,但我仍然有问题:R : Create specific bin based on data range

bin_it <- function(START, END, BINS) { 
    range <- END-START 
    jump <- range/BINS 
    v1 <- c(START, seq(START+jump+1, END, jump)) 
    v2 <- seq(START+jump-1, END, jump)+1 
    data.frame(v1, v2) 
} 

我的具体数据如下:

feature <- data.frame(chrom, start, end, feature_name, value, strand) 
chr2L 7529 9484 CG11023 1 + 
chr2L 21952 24237 CR43609 1 + 
chr2L 65999 66242 CR45339 1 + 

使用上面的代码,我曾尝试:

bin_it <- function(START, END, BINS) { 
     range <- START-END 
     jump <- range/BINS 
     v1 <- c(START, seq(START+jump, END, jump)) 
     v2 <- seq(START+jump, END, jump) 
     data.frame(v1, v2) 
    } 

bin_it(feature[,2], feature[,3], 100) 

我收到此错误信息:

Error in seq.default(START + jump + 1, END, jump) : 
'from' must be of length 1 

有关如何解决此问题的任何建议?

更新:

如从上述数据组的第一行的一个示例: START = 7529, END = 9484, BINS = 10 (to simplify), range = 1955, jump = 195.5

希望的输出将是:

 v1  v2 
[1] 7529.0 7724.5 
[2] 7724.5 7920.0 
[3] 7920.0 8115.5 
     ... 
[9] 9093 9288.5 
[10] 9288.5 9484 
+0

你想要的输出是什么? – ExperimenteR

回答

0

错误意味着你提供一个向量作为第一个参数(也是第二个)到seq而不是一个单一的数字。尝试与bin_it(feature[1,2], feature[1,3], 100),它应该工作正常。现在要解决这个要么做一个循环(坏)

output = c() 
for(l in 1:dim(feature)[1]){ 
    output = c(output, bin_it(feature[l,2], feature[l,3], 100)) 
} 

或(更好地)使用应用系列。在你的情况下,这样的事情应该这样做:

output = apply(feature[,2:3], 1, function(x) bin_it(START = x[,1], END = x[,2], BINS = 100)) 
+0

我刚刚发现一个更好的方法可能是'mapply(bin_it,feature [,2],feature [,3],100)' – mts

+0

很棒,非常感谢!只要将函数应用于我的数据行,这对我来说很有用。但是,我得到了不同类型的错误: 'data.frame(v1,v2)中的错误: 参数意味着不同的行数:99,101' 现在我只需要找到我在定义v1和v2。 – czyscner