2016-10-18 96 views
0
ID cat1 cat2 cat3 loss 
1 A B D 2213.18 
2 A B A 1283.60 
3 A B B 3005.09 
4 B A A 939.85 
5 A B C 2763.85 
6 A A A 5142.87 

有116個不同級別的分類變量,其中列出了三個。下面是我用來計算在一個變量虛擬變量創建的動態函數R

a1<-summarise(group_by(ins,cat85), cat85_mean=mean(loss)) 

爲各種級別的平均值(虧損)需要讓我的平均值(虧損)動態地做到這一點剩餘變量的所有分類代碼的功能例如:Cat85有4個等級,即A,B,C和D.該函數應該產生A,B,C和D的平均值(損失),如A-2000,B-1234.5,C -5667.5,D- 3465.2。

謝謝!

+1

請使用'dput()'提供您的示例數據,如http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example所示。這允許複製/粘貼示例數據。 –

+0

@tobiasegli_te當然。將在這裏做。謝謝! –

回答

1

這裏有一個溶液使用dplyr

lapply(grep("cat",names(ins), value = T),function(x){ 
    summarise(group_by_(ins,.groups=x), catX_mean=mean(loss)) 
}) 

[[1]] 
# A tibble: 2 × 2 
    .groups catX_mean 
    <chr>  <dbl> 
1  A 0.04570735 
2  B 0.76317575 

爲簡潔起見,我僅顯示第一列的結果。請注意,我對於「損失」使用了不同於您的示例數據的值。

+0

這段代碼時,我得到一個空列表。期望像它一樣產生每個變量不同級別的平均值(損失)。我覺得除了爲每個分類變量創建數據集之外別無他法。請讓我知道是否有更好的方法來做到這一點 –

+0

@AmitMiskin在代碼中有一個錯字,請嘗試再次運行它 –

+0

它工作。非常感謝! –

1

首先,獲取分類變量名稱爲一個向量。假設他們都開始用「貓」:

nn <- grep("cat", names(foo), value=TRUE) 

然後通過均值爲每個分類變量值找到:

foo <- lapply(nn, 
       function(n, dat) { 
        tapply(dat$loss, dat[,n], mean) 
       }, 
       ins[,c(nn,"loss")]) 

和名稱列表中的元素:

names(ins) <- nn 
+0

hrm ...我正在考慮使用dplyr來做這件事的方法,它只是讓我想到有一個'summarize_each'函數,但我不認爲有'group_by_each'左右......也許這個功能不存在? –