【发布时间】:2016-08-17 09:39:07
【问题描述】:
我有几个评分者对图像的评分:
data <- as.data.frame(matrix(c(rep(1,6),rep(2,6),rep(1:6,2),
0,2,1,0,1,0,0,0,3,0,0,0),12,3))
colnames(data) <- c("image", "rater", "rating")
print(data)
# image rater rating
# 1 1 1 0
# 2 1 2 2
# 3 1 3 1
# 4 1 4 0
# 5 1 5 1
# 6 1 6 0
# 7 2 1 0
# 8 2 2 0
# 9 2 3 3
# 10 2 4 0
# 11 2 5 0
# 12 2 6 0
我想按图片汇总 (mean) 评分,但前提是给定图片的零评分少于 3 个。否则(=如果有 3 个或更多零),总评分应为零。并且零的计数应该只适用于评分者 1-5。
那么对于上面的数据:
# image rating
# 1 1 0.8
# 2 2 0.0
对于图像 1,评分被汇总,因为第三个零属于评分者 6。对于图像 2,汇总评分为零,因为有超过 2 个零。
除此之外,我希望聚合考虑 a) 每张图片的前 5 个评分,以及 b) 仅正面评分。
我可以使用aggregate 管理最后两个条件:
aggregate(rating ~ image, data = data[data$rater <= 5 & data$rating != 0,], mean)
# Result:
# image rating
# 1 1 1.333333
# 2 2 3.000000
但我无法弄清楚第一个条件。
正确的结果应该是:
# image rating
# 1 1 1.333333
# 2 2 0.000000
有人可以帮忙吗?谢谢。
【问题讨论】:
-
也许可以试试
library(data.table) ; setDT(data)[, if(sum(rating[rater < 6] == 0) > 2) 0 else mean(rating[rating != 0]), by = image]。或library(dplyr) ; data %>% group_by(image) %>% summarise(rating = ifelse(sum(rating[rater < 6] == 0) > 2, 0, mean(rating[rating != 0])))。无论你喜欢什么香草。 -
@DavidArenburg 本着扩大基础 R 使用的精神查看我的回答。 :)
标签: r dataframe aggregate mean