【问题标题】:bin range and form a data frame using the boundary.bin 范围并使用边界形成数据框。
【发布时间】:2013-08-09 13:11:58
【问题描述】:

假设我想生成范围为 1 到 10 的 bin

round(seq(1,20,length.out=5))

输出是

1 6 10 15 20

我想形成一个data.frame

     [,1] [,2]
[1,]    1    6
[2,]    7   10
[3,]   11   15
[4,]   16   20

所以起点分别是 1,7,11,16,终点分别是 6,10,15,20。

有什么解决办法吗?

【问题讨论】:

  • 如何选择开始?范围是什么意思(是最大-最小吗?)?
  • 你是怎么想出 1、7、11 和 16 的。只是 0+1、6+1、10+1、15+1 吗?
  • 为什么要这样的data.frame?您可能能够更轻松地实现最终目标。告诉我们,您真正想要实现的目标。
  • 我想将一个区域合并为相同大小的小区域。这听起来很像“切”。但我想要每个小箱子的非重叠边界以便进一步操作。更具体地说,我正在尝试对基因组区域进行分类,提取映射在该区域上的读取。为此,我需要一个 rangedData,并且为此目的生成了 data.frame。

标签: r


【解决方案1】:
x = round(seq(1,20,length.out=5))

df = data.frame(a = c(x[1], head(x[-1],-1) + 1), b = x[-1])

df
#   a  b
#1  1  6
#2  7 10
#3 11 15
#4 16 20

【讨论】:

    【解决方案2】:

    我不确定您是否正在寻找以下解决方案。如果你是,你可以使用cutsub 函数,就像我的earlier 帖子中一样:

    mydata<-round(seq(1,20,length.out=5))
    mydata<-as.data.frame(mydata)
    names(mydata)<-"V" #name the column as V
    mydata$V1<-cut(mydata$V,5) #break the data into five intervals and name that as col V1
    mydata$lower<-with(mydata,as.numeric( sub("\\((.+),.*", "\\1", V1))) #extract lower value
    mydata$upper<-with(mydata,as.numeric( sub("[^,]*,([^]]*)\\]", "\\1",V1))) # extract upper value
    myfinaldata<-mydata[,c("lower","upper")] #create data frame of lower and upper values
    
    
      > myfinaldata
       lower upper
    1  0.981  4.79
    2  4.790  8.60
    3  8.600 12.40
    4 12.400 16.20
    5 16.200 20.00
    

    注意:虽然这些看起来像重叠的间隔,但它们不是。例如,对于第一行,这意味着所有数据>=0​​.981 但 =4.79 和

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 2023-01-12
      • 1970-01-01
      • 2013-04-30
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多