0

假设我想生成范围为 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。

有什么解决办法吗?

4

2 回答 2

1

我不确定您是否正在寻找以下解决方案。如果你是,你可以像我之前的帖子一样使用cut和运行:sub

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,而对于第二行,这是 >=4.79 和 <8.60。

于 2013-08-09T13:35:48.687 回答
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
于 2013-08-09T15:44:24.393 回答