我的数据框有rating
和4种类型指标Genre.1
,Genre.2
,Genre.3
,Genre.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))
答案 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)))