2013-12-19 27 views
1

我正在嘗試查找不同因子水平的彙總統計信息。使用應用系列對不同因子水平進行彙總統計

data.frame(apply(final_data[Company=="BPO",c(66:84)],2,summary)) 

現在我有不同的值company - 我可以重複聲明不同的值。我知道它可以自動化 - 使用申請系列(ddply,tapply,sapply),但我沒有得到正確的答案。

回答

2

你可能分裂的公司,然後用你的函數:

spl = split(final_data, final_data$Company) 
list.of.summaries = lapply(spl, function(x) data.frame(apply(x[,66:84], 2, summary))) 
+0

謝謝。我有相關的工作。 (),函數(x)cor(x))' – RUser

+0

當然,或者:list.of.cor = lapply(spl,function(x)cor(x [66:84])) – josliber

1

你可能要考慮使用bytapply功能。這將允許您跳過對split的明確呼叫。這是一個例子,因爲你沒有提供數據。

# some example data 
set.seed(1) 
df <- data.frame(x = as.factor(rep(1:5, each=10)), y1=rnorm(50), y2=rnorm(50)) 

# with `tapply` 
a <- do.call(rbind, sapply(df[,2:3], function(i) tapply(i, df$x, summary))) 
# with `by` 
a <- do.call(rbind, sapply(df[,2:3], function(i) by(i, df$x, summary))) 

下面是輸出:

> a 
     Min. 1st Qu. Median Mean 3rd Qu. Max. 
[1,] -0.8356 -0.54620 0.256600 0.1322 0.5537 1.5950 
[2,] -2.2150 -0.03775 0.491900 0.2488 0.9132 1.5120 
[3,] -1.9890 -0.39760 0.009218 -0.1337 0.5694 0.9190 
[4,] -1.3770 -0.32140 -0.056560 0.1207 0.6693 1.3590 
[5,] -0.7075 -0.23120 0.126100 0.1341 0.6619 0.8811 
[6,] -1.1290 -0.55080 0.103000 0.1435 0.5268 1.9800 
[7,] -1.8050 -0.02243 0.171000 0.4512 1.2720 2.4020 
[8,] -1.2540 -0.67980 -0.221100 -0.2477 0.2372 0.6107 
[9,] -1.5240 -0.26190 0.300000 0.1274 0.5380 1.1780 
[10,] -1.2770 -0.56560 0.042540 0.1123 1.0450 1.5870 

您可能還希望將此與變量和級別名稱結合起來,知道這是怎麼回事:

b <- expand.grid(level=levels(df$x),var=names(df[,2:3])) 
cbind(a,b) 

這有一個輸出:

> cbind(b,a) 
    level var Min. 1st Qu. Median Mean 3rd Qu. Max. 
1  1 y1 -0.8356 -0.54620 0.256600 0.1322 0.5537 1.5950 
2  2 y1 -2.2150 -0.03775 0.491900 0.2488 0.9132 1.5120 
3  3 y1 -1.9890 -0.39760 0.009218 -0.1337 0.5694 0.9190 
4  4 y1 -1.3770 -0.32140 -0.056560 0.1207 0.6693 1.3590 
5  5 y1 -0.7075 -0.23120 0.126100 0.1341 0.6619 0.8811 
6  1 y2 -1.1290 -0.55080 0.103000 0.1435 0.5268 1.9800 
7  2 y2 -1.8050 -0.02243 0.171000 0.4512 1.2720 2.4020 
8  3 y2 -1.2540 -0.67980 -0.221100 -0.2477 0.2372 0.6107 
9  4 y2 -1.5240 -0.26190 0.300000 0.1274 0.5380 1.1780 
10  5 y2 -1.2770 -0.56560 0.042540 0.1123 1.0450 1.5870