Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:当有多个指标时,按指标取数据的平均值_R_Average_Subset_Plyr - Fatal编程技术网

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)))