簡體   English   中英

R-根據因子分類

[英]R - Bin according to factor

我有一個數據集,我想為其中的每個組和類型組合運行classIntervals(df$vol, 3, style="jenks")

數據看起來像這樣。

data_sam <- data.frame( "group"=c( "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
  "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
  "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"
  ), "type"=c( "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
  "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B",
  "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B" ), "index"=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
  ), "vol"=c(52,272,374,408,498,480,451,644,715,659,820,713,810,676,840,589,594,998,782,483,351,494,377,261,637,379,706,530,619,724,333,189,246,82,39,85,159,143,125,118,79,39,110,190,264,101,70,46,0,27,71,69,172,464,132,0,156,167,142,45,51,10,0,14,67,20,2,12,1,0,6,2,2,17,22,7,0,2,9,5,12,15,7,0,12,18,4,3,12,9,12,13,14,8,9,11,10,5,4,1,4,10,4,4,3,5,5,1,3,0,2,3,2,4,2,3,3,0,0,1,1,1,0,0,1,1,2,0,1,1,0,1,1,0,0,1,0,0,0,0,1,2,0,1,1
  ))

我希望能夠看到每個組類型的bin結果。

根據上面的數據,運行classIntervals應該得到以下結果:

A組-A型

style: jenks
one of 2,628 possible partitions of this variable into 3 classes
[0,190]     (190,530]   (530,998] 
53          17          16 

A組-B型

style: jenks
one of 66 possible partitions of this variable into 3 classes
[0,2]   (2,5]   (5,14] 
34      15      10 

有沒有一種方法可以遍歷data_sam用於垃圾箱的組類型? 並且,理想情況下,將結果查看為以以下方式格式化的data.frame

group type count1 count2 count3 boundary1 boundary2 boundary3 AA 53 17 16 [0,190] (190,530] (530,998] AB 34 15 10 [0,2] (2,5] (5,14]

另外,我很高興看到data_sam上每一行的每個分組中的data_sam

我不確定這里有什么可能,所以請告訴我。

考慮by ,面向對象的包裝器tapply以在因子子集上運行操作。 具體來說,您可以返回最后要綁定在一起的數據幀列表。

下面如文檔所述從classIntervals調用中提取返回值的brks對象,假定該對象是命名向量,其中名稱是邊界,值是計數。

df_list <- by(df, df[,c("group", "type")], function(sub) {
   tryCatch({
      res <- classIntervals(sub$vol, n=3, style="jenks")$brks

      data.frame(group = sub$group[1],
                 type = sub$type[1],
                 count1 = res[1],
                 count2 = res[2],
                 count3 = res[3],
                 boundary1 = names(res)[1],
                 boundary2 = names(res)[2],
                 boundary3 = names(res)[3])
      }, error = function(e) NA
   )
})

final_df <- do.call(rbind, df_list)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM