我有一个数据框,其中的列列出了 child 最喜欢的 5 种动物。我想计算每只动物的频率,并对动物在整个数据集中的平均位置进行排名。
每列中的数据按升序排序(参见下面的数据)(例如 Var 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 多列。谢谢。
最佳答案
基本 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)
关于R 中分类矩阵的排序系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963069/