【问题标题】:R: calculate percent through data range - create binR:通过数据范围计算百分比 - 创建 bin
【发布时间】:2015-07-01 05:48:54
【问题描述】:

我对使用 R 进行编码绝对是全新的 - 实际上是一般的编码,所以请原谅我的无知。

我有一个数据文件,其中包含不同长度特征的“开始”和“结束”位置值。我想输出一个文件,该文件通过特征长度(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

【问题讨论】:

  • 你想要的输出是什么?

标签: r function bin seq


【解决方案1】:

错误意味着您向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))
}

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

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

【讨论】:

  • 我刚刚发现一个更好的方法可能是mapply(bin_it, feature[,2], feature[,3], 100)
  • 太好了,非常感谢!就将函数应用于我的数据行而言,这对我有用。但是,我遇到了另一种类型的错误:Error in data.frame(v1, v2) : arguments imply differing number of rows: 99, 101 现在我只需要找到在定义 v1 和 v2 时缺少的内容。
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2022-01-26
  • 1970-01-01
相关资源
最近更新 更多