R:当有多个指标时,按指标计算数据的平均值

时间:2013-12-02 00:36:20

标签: r average subset plyr

我的数据框有rating和4种类型指标Genre.1Genre.2Genre.3Genre.4。每个基因指标的范围为0-16,对应于哪种类型最为普遍。

我想为每种类型取平均值rating。即rating中每当有{1}时的平均值Genre.1:4,则只要G1:4中有2就取平均值。

最后,我想取平均值。 IE浏览器。如果Genre.1为1且Genre.2为2,那么它将取Genre.1的平均值和Genre.2的平均值

我的代码一直工作,直到我尝试取平均值的平均值。任何人都有更清洁的方法来做这个建议吗?任何人对平均更好的平均值有什么建议吗?

我希望得到ID以及它列出的类型的平均评分。

pred <- data.frame(1:6,
               c(1,2,3,1,2,5),
               c(4,5,4,3,4,5),
               c(1,1,1,1,2,3),
               c(1,2,1,2,1,3),
               c(1,2,3,4,5,6),
               c(2,3,4,3,2,5))
names(pred) <- 
  c("ID", "User.ID", "Rating", "Genre.1", "Genre.2", "Genre.3", "Genre.4")

temp <- subset(pred, Genre.1 == 1 | Genre.2 == 1 | Genre.3 == 1 | Genre.4 == 1)

temp1 <- ddply(temp, c("Genre.1", "User.ID"), summarise, avg = mean(Rating))

temp <- subset(pred, Genre.1 == 2 | Genre.2 == 2 | Genre.3 == 2 | Genre.4 == 2)

temp2 <- ddply(temp, c("Genre.1", "User.ID"), summarise, avg = mean(Rating))

temp <- subset(pred, Genre.1 == 3 | Genre.2 == 3 | Genre.3 == 3 | Genre.4 == 3)

temp3 <- ddply(temp, c("Genre.1", "User.ID"), summarise, avg = mean(Rating))

temp4 <- rbind(temp1, temp2, temp3)

test <- rbind(temp1, temp2, temp3, temp4)
names(test) <- c("Genre", "User.ID", "Rating")

temp <- join(test, pred, by = "User.ID", type = "full")

# this gives the format I want but does not discern if the genre is present 
# for the average.
test <- ddply(temp, "ID", summarise, avg = mean(Rating))

1 个答案:

答案 0 :(得分:0)

您需要先将数据从长格式转换为宽格式。您可以从那里对值进行子集化。以下示例查找所有内容的平均值。

library(reshape2)
library(plyr)

pred2 <- melt(pred, id=c("ID", "User.ID", "Rating"))
means <- ddply(pred2, .(variable), summarize, mean.values = mean(value))
mean(means$mean.values) #mean of means

编辑:

返回所有类型值的平均值列表:

lapply(1:4, function(x) ddply(pred2[pred2$value == x, ], .(variable), summarize, mean = mean(value)))