R:当有多个指标时,按指标取数据的平均值
我有一个数据框,它有一个R:当有多个指标时,按指标取数据的平均值,r,average,subset,plyr,R,Average,Subset,Plyr,我有一个数据框,它有一个评级和4个类型指标类型.1,类型.2,类型.3,类型.4。每个基因指标的范围为0-16,对应于最流行的类型 我想对每一种类型进行平均评分。即体裁1:4时的平均评分,然后在G1:4时的平均评分 最后,我想取平均数的平均值。也就是说,如果Genre.1为1,Genre.2为2,则取Genre.1和Genre.2的平均值 我的代码一直运行,直到我尝试取平均值。有人对更干净的方法有什么建议吗?有人有什么建议让平均数更好 我想以ID和它列出的流派的平均评级结束 pred <-
评级
和4个类型指标类型.1
,类型.2
,类型.3
,类型.4
。每个基因指标的范围为0-16,对应于最流行的类型
我想对每一种类型进行平均评分。即体裁1:4时的平均评分
,然后在G1:4时的平均评分
最后,我想取平均数的平均值。也就是说,如果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))
pred您需要首先将数据从长格式转换为宽格式。您可以从中子集这些值。下面的示例找到了所有内容的平均值
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)))