我很確定我正在複雜的事情。我有P參數(這裏:v1
到v3
)數據幀和兩個因子變量(這裏:sex
和unemp
):簡化創建彙總表的過程
> head(df)
sex unemp v1 v2 v3
1 0 0 2 4 4
2 0 0 2 1 1
3 1 0 3 3 5
4 1 1 2 3 5
5 0 0 1 2 5
6 1 0 3 5 4
我現在想修改(即計算中位數和平均,然後重新整理彙總表),我以這樣一種方式的數據所產生的數據幀是這樣的(男性或女性):
> df.res.men
median.unemp.1 median.unemp.0 mean.unemp.1 mean.unemp.0
v1 2.0 2.0 2.666667 2.391304
v2 2.0 3.5 2.500000 3.369565
v3 4.5 3.0 4.166667 2.956522
下面是完整的代碼:
library(plyr)
## generate data
set.seed(1)
df <- data.frame(sex=rbinom(100, 1, 0.5),
unemp=rbinom(100, 1, 0.2),
v1=sample(1:5, 100, replace=TRUE),
v2=sample(1:5, 100, replace=TRUE),
v3=sample(1:5, 100, replace=TRUE)
)
head(df)
## compute mean and median for all variables by sex and unemp
df.mean <- ddply(df, .(unemp, sex), .fun=colMeans, na.rm=TRUE)
df.mean
df.median <- ddply(df, .(unemp, sex), .fun=function(x)apply(x,2,median, na.rm=TRUE))
df.median
## rearrange summary table
df.res.men <- cbind(t(subset(df.median, sex==0 & unemp==1)),
t(subset(df.median, sex==0 & unemp==0)),
t(subset(df.mean, sex==0 & unemp==1)),
t(subset(df.mean, sex==0 & unemp==0)))
df.res.men <- df.res.men[-c(1:2),]
colnames(df.res.men) <- c("median.unemp.1", "median.unemp.0",
"mean.unemp.1", "mean.unemp.0")
df.res.men
非常感謝!我認爲這就是我一直在尋找的。 –
@Ramnath - 感謝在'reshape'和'reshape2'之間捕捉功能的改變。我沒有把任何人混淆,而是刪除了我的答案。另外,+1給你。 –
@Josh。我想你應該保留你的答案。它非常優雅。你可以添加一個註釋,說明這個功能來自'reshape'並從'reshape2'丟棄。 – Ramnath