我正在尝试查找不同因素级别的摘要统计信息。
data.frame(apply(final_data[Company=="BPO",c(66:84)],2,summary))
现在我对company
有不同的值 - 我可以为不同的值重复该语句。我知道它可以自动化 - 使用应用系列(ddply
,tapply
,sapply
),但我没有做对。
答案 0 :(得分:2)
您可以拆分公司,然后使用您的功能:
spl = split(final_data, final_data$Company)
list.of.summaries = lapply(spl, function(x) data.frame(apply(x[,66:84], 2, summary)))
答案 1 :(得分:1)
您可能需要考虑使用by
或tapply
函数。这样您就可以跳过对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