2017-07-14 42 views
0

我有這樣創建的所有列的和「其他」列不符合標準

data.frame(age=c("(0,5]", "(5,10]", "(10,15]", "(15,20]", "(20,25]", "(25,30]"), 
      C1=c(0, 0, 0, 0, 0, 0), 
      C2=c(0, 0, 0, 0, 0, 0), 
      C3=c(0, 270, 30, 4, 0, 0), 
      C4=c(0, 30, 30, 4, 0, 0)) 

數據幀只是,開始與C柱是+50。我打算使用https://stackoverflow.com/a/10139458/792066創建一個帶C列的帕累託圖,但標籤數量太多會使圖表變得毫無價值。通常的解決方案是創建一個名爲「others」的新列,其中不包含頂級5〜10的列。我想我正在尋找什麼summarize()做因子列與分類變量。如果他們的總和不在頂部X的範圍內,我怎樣才能將所有的列整合到一個新的列中?

回答

0

下面是使用colSumsrowSums一個基礎R方法:

df <- data.frame(age = c("(0,5]", "(5,10]", "(10,15]", "(15,20]", "(20,25]", "(25,30]"), 
       C1 = c(0, 0, 0, 0, 0, 0), 
       C2 = c(0, 0, 0, 0, 0, 0), 
       C3 = c(0, 270, 30, 4, 0, 0), 
       C4 = c(0, 30, 30, 4, 0, 0)) 

others <- names(sort(-colSums(df[-1]))[-1:-2]) 

df$others <- rowSums(df[others]) 

df_lumped <- df[!names(df) %in% others] 

df_lumped 
#>  age C3 C4 others 
#> 1 (0,5] 0 0  0 
#> 2 (5,10] 270 30  0 
#> 3 (10,15] 30 30  0 
#> 4 (15,20] 4 4  0 
#> 5 (20,25] 0 0  0 
#> 6 (25,30] 0 0  0 

您需要根據您想要保留列的數量來調整[-1:-2]。例如[-1:-5]將保持前5名。

相關問題