我有一个数据框,其中的列列出了孩子的5种喜欢的动物。我想计算每只动物的发生频率,并在整个数据集中对动物的平均位置进行排名。
每列中的数据均按升序排序(请参见下面的数据)(例如,变量1:Dog的排名为1,Roach的排名为5)。 Dog的平均排名为(1 + 2 + 3)/ 3 = 2,而整个数据集的频率为3。对于Cat,平均排名为(2 + 1 + 2)/ 3 = 1.67,频率为3。对于Roach,平均排名为4,频率为3。
Var1 <- c('Dog','Cat','Chicken','Bird','Roach')
Var2 <- c('Cat','Dog','Roach','Turtle','Bird')
Var3 <- c('Bird','Cat','Dog','Roach','Zebra')
animal.data <- data.frame(Var1, Var2, Var3)
print(animal.data)
我不确定最有效的方法是什么。我的完整数据集超过500列。谢谢。
答案 0 :(得分:2)
一种base R
方法,
animals <- unique(unlist(animal.data))
out <- list()
for(i in animals) {
x <- which(animal.data == i, arr.ind = TRUE)
avg <- round(mean(x[,1]),2)
freq <- nrow(x)
out[[i]] <- data.frame(Mean=avg,Freq=freq)
}
do.call(rbind,out)
给予
Mean Freq
Dog 2.00 3
Cat 1.67 3
Chicken 3.00 1
Bird 3.33 3
Roach 4.00 3
Turtle 4.00 1
Zebra 5.00 1
数据:
Var1 <- c('Dog','Cat','Chicken','Bird','Roach')
Var2 <- c('Cat','Dog','Roach','Turtle','Bird')
Var3 <- c('Bird','Cat','Dog','Roach','Zebra')
animal.data <- data.frame(Var1, Var2, Var3,stringsAsFactors=FALSE)