在r中创建一个binning变量以在其上汇总数据?
我想创建一个变量,该变量基于binwidth从另一个变量中存储值 如果我想基于计数创建一个bin变量,那么数据看起来应该是这样的,其中:在r中创建一个binning变量以在其上汇总数据?,r,R,我想创建一个变量,该变量基于binwidth从另一个变量中存储值 如果我想基于计数创建一个bin变量,那么数据看起来应该是这样的,其中: 1 to 5 = 1 6 to 10 = 2 11 to 15 = 3 不需要手动重新编码每个箱子,在R中是否有这样的功能?是的,它被称为剪切功能 ? 剪切是的,它被称为剪切函数 ? cutcut函数实际上可以完成变量的装箱,同时将其保持为连续变量。您只需使用labels参数: myData$bucket <- cut(myData$counts, b
1 to 5 = 1
6 to 10 = 2
11 to 15 = 3
不需要手动重新编码每个箱子,在R中是否有这样的功能?是的,它被称为剪切功能
? 剪切是的,它被称为剪切函数
? cutcut函数实际上可以完成变量的装箱,同时将其保持为连续变量。您只需使用labels参数:
myData$bucket <- cut(myData$counts, breaks = 30, labels = rep(1:30))
cut函数实际上可以完成变量的装箱,同时将其保持为连续变量。您只需使用labels参数:
myData$bucket <- cut(myData$counts, breaks = 30, labels = rep(1:30))
您可以使用通用切割函数。对于数值向量x,该方法具有以下参数:
>argscut.default
函数x,中断,标签=NULL,include.lowest=FALSE,right=TRUE,
dig.lab=3L,排序结果=FALSE。。。
争论的焦点在这里。它是定义间隔的若干间隔或“断点”向量。请注意,默认情况下,所有间隔都是right open right=TRUE,因此通过创建一个对象x,包含从1到100的数字,并定义一个断点向量brk{1,20,50,100},您将在对结果使用表后获得这些结果:
>x brk tablecutx=x,breaks=brk
1,20] 20,50] 50,100]
19 30 50
您可以看到,第一个间隔是$1,\,20]$,因此1不是它的一部分,第一个观察值将成为丢失的值NA,因为定义的间隔之外的所有其他观察值都是NA。
通过设置include.lowest=TRUE,R包含最低值,即第一个间隔将关闭,因此我认为这将产生您想要的结果:
>x brk tablecutx=x,breaks=brk,include.lower=TRUE
[1,20] 20,50] 50,100]
20 30 50
参数right反转整个过程,因此默认情况下间隔保持打开状态,并且include.lowest将关闭最后一个间隔,即包括最后一个类别中的最高值
由于生成的对象将是类因子,可以考虑将OrthDead结果设置为true,从而生成有序的对象类排序和因子。 标签等是可选的,请参见?切割。
您可以使用通用切割函数。对于数值向量x,该方法具有以下参数: >argscut.default 函数x,中断,标签=NULL,include.lowest=FALSE,right=TRUE, dig.lab=3L,排序结果=FALSE。。。 争论的焦点在这里。它是定义间隔的若干间隔或“断点”向量。请注意,默认情况下,所有间隔都是right open right=TRUE,因此通过创建一个对象x,包含从1到100的数字,并定义一个断点向量brk{1,20,50,100},您将在对结果使用表后获得这些结果: >x brk tablecutx=x,breaks=brk 1,20] 20,50] 50,100] 19 30 50 您可以看到,第一个间隔是$1,\,20]$,因此1不是它的一部分,第一个观察值将成为丢失的值NA,因为定义的间隔之外的所有其他观察值都是NA。 通过设置include.lowest=TRUE,R包含最低值,即第一个间隔将关闭,因此我认为这将产生您想要的结果: >x brk tablecutx=x,breaks=brk,include.lower=TRUE [1,20] 20,50] 50,100] 20 30 50 参数right反转整个过程,因此默认情况下间隔保持打开状态,并且include.lowest将关闭最后一个间隔,即包括最后一个类别中的最高值由于生成的对象将是类因子,可以考虑将OrthDead结果设置为true,从而生成有序的对象类排序和因子。
标签等是可选的。请参见?剪切。因为看起来您想要得到的是数值结果而不是因子结果,请尝试类似truncmydata$count-1/5+1的方法 e、 g 还有天花板功能,它稍微简单一些:
mydata$bucket = ceiling(mydata$count/5)
看到了吗?圆的
因此,根据您的数据:
mydata = data.frame(spend=c(21,32,34,43,36,39,33,47,47,47,25,50,44,44) ,
count=c(3L,1L,2L,15L,1L,8L,1L,11L,15L,11L,3L,12L,11L,4L) )
mydata$bucket = ceiling(mydata$count/5)
其中:
> mydata
spend count bucket
1 21 3 1
2 32 1 1
3 34 2 1
4 43 15 3
5 36 1 1
6 39 8 2
7 33 1 1
8 47 11 3
9 47 15 3
10 47 11 3
11 25 3 1
12 50 12 3
13 44 11 3
14 44 4 1
因为看起来您想要得到的是数值结果而不是因子结果,所以请尝试类似truncmydata$count-1/5+1的方法 e、 g 还有天花板功能,它稍微简单一些:
mydata$bucket = ceiling(mydata$count/5)
看到了吗?圆的
因此,根据您的数据:
mydata = data.frame(spend=c(21,32,34,43,36,39,33,47,47,47,25,50,44,44) ,
count=c(3L,1L,2L,15L,1L,8L,1L,11L,15L,11L,3L,12L,11L,4L) )
mydata$bucket = ceiling(mydata$count/5)
其中:
> mydata
spend count bucket
1 21 3 1
2 32 1 1
3 34 2 1
4 43 15 3
5 36 1 1
6 39 8 2
7 33 1 1
8 47 11 3
9 47 15 3
10 47 11 3
11 25 3 1
12 50 12 3
13 44 11 3
14 44 4 1
谢谢,我确实知道切割函数,但希望将桶变量保持为连续变量?谢谢,我确实知道切割函数,但希望将桶变量保持为连续变量?你的箱子错了!看看最后三行,第二行和第三行把11和12放进了垃圾箱1。你的垃圾箱错了!看看最后三行,最后第二行和第三行将11和12放入了容器1。这是一个很好的答案。您知道如何创建桶,以使sp的比例相等吗
在每一桶中结束?对不起,我认为不止一种方法可以解释每一桶中支出的相等比例,所以你的问题并不明确——事实上,最好将其作为一个新问题发布。你是说观察次数相等,还是支出价值的总和相等?是的,我可能会发布一个新问题,但我的意思是支出的总和或平均数的比例相等。你可能可以使用加权计数分位数,使用Hmisc的wtd。分位数,这是一个很好的答案。你知道如何创建桶以便每个桶中的支出比例相等吗?对不起,我看到了多种解释每个桶中支出比例相等的方法,因此你的问题并不明确——事实上,最好将其作为新问题发布。你是说观察次数相等,还是支出值的总和相等?是的,我可能会作为一个新问题发帖,但我的意思是支出总和或平均数的比例相等。你可以使用Hmisc的wtd.quantile,使用计数的加权分位数,在Hmisc中,权重是基于支出的。