R中的装箱程序?
我正在努力将以下装箱“算法/过程”放入R代码/脚本中,这可能与用于装箱内核密度估计的类似: 假设我们有一些数据:R中的装箱程序?,r,binning,R,Binning,我正在努力将以下装箱“算法/过程”放入R代码/脚本中,这可能与用于装箱内核密度估计的类似: 假设我们有一些数据: set.seed(12345) # setting seed x<-rnorm(100) # generating data 首先,我要特别感谢@missuse的帮助、努力和投入。其次,我想为我对一些baseR函数的无知(希望是由于缺乏R和编程方面的经验)表示歉意 我正在转换和试验为我的计算开发的代码@missue,但是,不断出现缺少x的问题,并且经常需要手动调整不同的数
set.seed(12345) # setting seed
x<-rnorm(100) # generating data
首先,我要特别感谢@missuse的帮助、努力和投入。其次,我想为我对一些base
R函数的无知(希望是由于缺乏R和编程方面的经验)表示歉意
我正在转换和试验为我的计算开发的代码@missue,但是,不断出现缺少x
的问题,并且经常需要手动调整不同的数据集。特别是,当我在试验由数据的样本分位数确定的断点时。在我看来,cut
功能似乎相当敏感(注意:由于我的目标、数据等原因,这可能是相当主观的)。因此,前几天,我厌倦了不断的调整,并对各种R函数执行了help()
命令,hist()
来帮助我解决了几乎所有的装箱问题。下面是一个非常简单的示例,用于确定每个箱子中有多少个x
,以及如何确定每个箱子的箱子中心:
hist(x, breaks=c(-5:5), plot=FALSE)$counts # for bin counts
hist(x, breaks=c(-5,5), plot=FALSE)$mids # for bin centers
在上面,我假设选择所需的中断,您可以根据
cut
函数构建一个函数,并相应地切割网格进行估算@下面的误译提供了一个很好的基础,用<代码>剪切< /代码>设置断点,只需确保您的数据跨越<<代码> Sturt规范> <代码>组()/<代码>。p> 可能是这样的:
数据:
对每个列表项执行感兴趣的功能
lapply(z, median) #median for each bin
lapply(z, function(i) {
mini = min(i)
maxi = max(i)
sum(mini <= x & x <= maxi)
}
) #number of elements of x in each bin
缺少哪个x:
nbins<-cut(y, 8)
z = lapply(levels(nbins), function(x) y[nbins == x])
gix = lapply(z, function(i) {
mini = min(i)
maxi = max(i)
x[mini <= x & x <= maxi]
}
)
x[!x %in% unlist(gix)]
#-1.6620502 -0.8115405
这至少可以解决缺少x元素的问题
优化问题的解决方法与上述方法相同
哪个(未列出(p))
,只有前4个满足规则,所以3,4,5,6非常感谢,因为它可以很好地找到一个中间值(每个箱子的中心),但不幸的是,它在每个箱子中提供了y
的长度,而我在寻找每个箱子中有多少x
属于(落入)…@EmptyHead Maybetable(nbins)
@EmptyHead updated,检查输出是否与所需的一致。@如果执行sum(未列出,函数(i){mini=min(i)maxi=max(i)sum,则使用错误(mini@EmptyHead我还观察了sum=97
,认为这很奇怪,所以我运行了一些测试。请参阅编辑。
p =lapply(3 : length(x), function(i){
nbins<-cut(y, i)
z = lapply(levels(nbins), function(j) y[nbins == j])
sumi = lapply(z, function(i) {
mini = min(i)
maxi = max(i)
sum(mini <= x & x <= maxi)
}
)
return(sum(unlist(sumi)>0) == length(sumi))
}
)
which(unlist(p)), only first 4 satisfy the rule, so 3, 4, 5, 6
z = lapply(levels(nbins), function(x) y[nbins == x] )
lapply(z, median) #median for each bin
lapply(z, function(i) {
mini = min(i)
maxi = max(i)
sum(mini <= x & x <= maxi)
}
) #number of elements of x in each bin
sum(unlist(lapply(z, function(i) {
mini = min(i)
maxi = max(i)
sum(mini <= x & x <= maxi)
}
))) is less than 100 in many cases
nbins<-cut(y, 8)
z = lapply(levels(nbins), function(x) y[nbins == x])
gix = lapply(z, function(i) {
mini = min(i)
maxi = max(i)
x[mini <= x & x <= maxi]
}
)
x[!x %in% unlist(gix)]
#-1.6620502 -0.8115405
p =lapply(2 : length(x), function(i){
nbins<-cut(y, i)
z = lapply(levels(nbins), function(j) y[nbins == j])
sumi = lapply(z, function(i) {
mini = min(i)
maxi = max(i)
p = round(x, 2)
sum(mini <= p & p <= maxi)
}
)
return(sum(unlist(sumi)>0) == length(sumi))
}
)