Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的装箱程序?_R_Binning - Fatal编程技术网

R中的装箱程序?

R中的装箱程序?,r,binning,R,Binning,我正在努力将以下装箱“算法/过程”放入R代码/脚本中,这可能与用于装箱内核密度估计的类似: 假设我们有一些数据: set.seed(12345) # setting seed x<-rnorm(100) # generating data 首先,我要特别感谢@missuse的帮助、努力和投入。其次,我想为我对一些baseR函数的无知(希望是由于缺乏R和编程方面的经验)表示歉意 我正在转换和试验为我的计算开发的代码@missue,但是,不断出现缺少x的问题,并且经常需要手动调整不同的数

我正在努力将以下装箱“算法/过程”放入R代码/脚本中,这可能与用于装箱内核密度估计的类似:

假设我们有一些数据:

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 Maybe
table(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))
}
)