如何对数据进行分组以最小化方差,同时保留R中数据的顺序

时间:2015-02-13 14:13:43

标签: r

我有一个包含两列的数据框(760行),名为Price和Size。我想根据价格将数据放入4/5组,这样可以最小化每个组中的差异,同时保留订单大小(按升序排列)。 Jenks自然中断优化将是一个理想的功能,但它不考虑大小的顺序。

基本上,我的数据类似于以下(有更多数据)

Price=c(90,100,125,100,130,182,125,250,300,95)

Size=c(10,10,10.5,11,11,11,12,12,12,12.5)  

mydata=data.frame(Size,Price)

我想对数据进行分组,以最小化各组中的价格差异1)尺寸值:例如,前两个价格90和100不能在不同的组中,因为它们的大小和数量相同。 2)大小的顺序:例如,如果第一组包括观察(Obs)1-2,第二组包括观察3-9,则观察10只能进入第二组或第三组。

有人可以给我一些建议吗?也许已经有一些我找不到的功能?

2 个答案:

答案 0 :(得分:0)

这是你在找什么?使用dplyr包,分组非常简单。 %>%可以读作"然后执行"所以如果你愿意,你可以组合多个动作。

有关详细信息,请参阅http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

library("dplyr")
Price <– c(90,100,125,100,130,182,125,250,300,95)
Size <- c(10,10,10.5,11,11,11,12,12,12,12.5)  

mydata <- data.frame(Size,Price) %>% # "then"
  group_by(Size) # group data by Size column

mydata_mean_sd <- mydata %>%  # "then"
  summarise(mean = mean(Price), sd = sd(Price)) # calculate grouped
                                         #mean and sd for illustration

答案 1 :(得分:0)

我有一个类似的问题,就是将一天最佳地分成4个“负荷块”。当然,相邻的时间段必须结合在一起。

这不是一个很好的解决方案,但是我写了我自己的函数,该函数首先在指定的断点处对已排序的序列进行拆分,然后使用这些断点来计算sum(SDCM)(使用来自{{3} }。

然后仅迭代所有有效的断点组合,然后选择产生最小和(SDCM)的点集。

随着可能的断点组合数量的增加,它将很快变得难以管理,但它适用于我的数据集。