她是我的数据:
x<- data.frame(P=c("M","C","M","C","C","M","C","M"),
Q=c(13,12,12,14,19,15,12,11),
R=c(15,13,21,32,32,21,13,32),
T=c(15,12,12,14,12,11,19,15))
我想计算每个类别中变量的均值。 例如,Q的平均值为:M =(13 + 12 + 15 + 11)= 12.75,C =(12 + 14 + 19 + 12)= 14.25,等等。
接下来,我想对每个变量的均值进行排名,并获得下表:
P Q R T
M 2 2 2
C 1 1 1
我想为我的真实数据获得相同的排名。 例如。如果我有三个12,所有人都会得到相同的等级
答案 0 :(得分:2)
你可以尝试
aggregate(.~P, x, mean)
或者
library(dplyr)
x1 <- x %>%
group_by(P) %>%
summarise_each(funs(mean))
x1
# P Q R T
#1 C 14.25 22.50 14.25
#2 M 12.75 22.25 13.25
排名
x1 %>%
mutate_each(funs(rank(-.)), Q:T)
# P Q R T
#1 C 1 1 1
#2 M 2 2 2
假设有关系,
x1$Q[2] <- x1$Q[1]
默认情况下, rank
会获得平均关系。您可以指定ties.method
至min
或使用min_rank
x1 %>%
mutate_each(funs(min_rank(-.)), Q:T)
# P Q R T
#1 C 1 1 1
#2 M 1 2 2
答案 1 :(得分:2)
为了完整起见,可以使用devel version on GitHub
中data.table
的{{1}}解决方案
手段
frank
对于排名
library(data.table) ## v >= 1.9.5
(Res <- setDT(x)[, lapply(.SD, mean), by = P])
# P Q R T
# 1: M 12.75 22.25 13.25
# 2: C 14.25 22.50 14.25
答案 2 :(得分:1)
获得你可以做到的意思
do.call(rbind,lapply(split(x, f = x$P), function(x) data.frame(P = unique(x$P), Q = mean(x$Q), R = mean(x$R), T = mean(x$T))))