0
我幾個評價者有圖像的評級:R:如果列有少於3個零聚合數據幀,否則返回零
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分的評分被聚集,因爲第三零屬於RATER 6.對於圖像2,聚集評級是零,因爲有超過2個0。最重要的是,我希望聚合考慮到a)每張圖片只有前5個評分,以及b)只有正面評分。
我可以使用aggregate
管理的最後2個條件:
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]'maybe。或者library(dplyr); data%>%group_by(image )%>%summary(rating = ifelse(sum(rating(評分[評價者] < 6] == 0) > 2,0,平均評分[評分!= 0]))''不管你喜歡什麼香草。 –
@DavidArenburg請看我的回答。基地R使用。:) – lmo