R:通过数据范围计算百分比 - 创建 bin
R: calculate percent through data range - create bin
我对使用 R 进行编码绝对是全新的 - 实际上是一般的编码,所以请原谅我的无知。
我有一个包含 'start' 和 'end' 位置值的数据文件,用于不同长度的特征。我想输出一个文件,该文件按特征长度 (1 - 100%) 的百分比为每个特征(数据行)创建 bin。
我认为这基本上回答了问题,但我仍然遇到问题:
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
错误意味着您提供了一个向量作为 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))
我对使用 R 进行编码绝对是全新的 - 实际上是一般的编码,所以请原谅我的无知。
我有一个包含 'start' 和 'end' 位置值的数据文件,用于不同长度的特征。我想输出一个文件,该文件按特征长度 (1 - 100%) 的百分比为每个特征(数据行)创建 bin。
我认为这基本上回答了问题,但我仍然遇到问题:
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
错误意味着您提供了一个向量作为 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))