我有一个数据集如下:
id <- c(1,1,1,2,2,2,3,3,3,3)
text.id <- c(1,1,1,1,1,1,2,2,2,2)
item.id <- c(1,2,3,1,2,3,1,2,3,4)
score <- c(30,30, 30, 42, 42, 42, 60,60,60,60)
data <- data.frame("id"=id,"text.id"=text.id, "item.id"=item.id, "score"=score)
> data
id text.id item.id score
1 1 1 1 30
2 1 1 2 30
3 1 1 3 30
4 2 1 1 42
5 2 1 2 42
6 2 1 3 42
7 3 2 1 60
8 3 2 2 60
9 3 2 3 60
10 3 2 4 60
每个item.id
都嵌入每个text.id
中。例如,text.id=1
中包含三个项目。 text.id=3
包含四个项目,依此类推。但是,在text.id
秒中,每个item.id
的得分都是相同的。我想做的是,对于每个id
(学生),应该通过除以每个text.id中的项目数来平均分数。
数据集如下所示:
> data
id text.id item.id score mean
1 1 1 1 30 10
2 1 1 2 30 10
3 1 1 3 30 10
4 2 1 1 42 13
5 2 1 2 42 13
6 2 1 3 42 13
7 3 2 1 60 15
8 3 2 2 60 15
9 3 2 3 60 15
10 3 2 4 60 15
有什么想法吗?
谢谢!
答案 0 :(得分:2)
您可以使用ave
来获得每个ID的length
,并用它来划分score
。
data$mean <- data$score/ave(data$score, data$id, FUN=length)
data
# id text.id item.id score mean
#1 1 1 1 30 10
#2 1 1 2 30 10
#3 1 1 3 30 10
#4 2 1 1 42 14
#5 2 1 2 42 14
#6 2 1 3 42 14
#7 3 2 1 60 15
#8 3 2 2 60 15
#9 3 2 3 60 15
#10 3 2 4 60 15
日期:
x <- aggregate(cbind(mean=item.id) ~ text.id, data=data, FUN=function(x) {length(unique(x))})
data <- merge(data, x)
data$mean <- data$score / data$mean
data
# text.id id item.id score mean
#1 1 1 1 30 10
#2 1 1 2 30 10
#3 1 1 3 30 10
#4 1 2 1 42 14
#5 1 2 2 42 14
#6 1 2 3 42 14
#7 2 3 1 60 15
#8 2 3 2 60 15
#9 2 3 3 60 15
#10 2 3 4 60 15
更新2:
x <- aggregate(cbind(mean=item.id) ~ text.id + id, data=data, FUN=function(x) {length(unique(x))})
data <- merge(data, x)
data$mean <- data$score / data$mean
data
# id text.id item.id score mean
#1 1 1 1 30 10
#2 1 1 2 30 10
#3 1 1 3 30 10
#4 2 1 1 42 14
#5 2 1 2 42 14
#6 2 1 3 42 14
#7 3 2 1 60 15
#8 3 2 2 60 15
#9 3 2 3 60 15
#10 3 2 4 60 15
答案 1 :(得分:1)
使用for i in 1..<self.imagesStrip.count{ autoreleasepool {
,我们可以做到
dplyr
和library(dplyr)
data %>% group_by(id) %>% mutate(mean_sc = score/n())
# id text.id item.id score mean_sc
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 1 1 30 10
# 2 1 1 2 30 10
# 3 1 1 3 30 10
# 4 2 1 1 42 14
# 5 2 1 2 42 14
# 6 2 1 3 42 14
# 7 3 2 1 60 15
# 8 3 2 2 60 15
# 9 3 2 3 60 15
#10 3 2 4 60 15
data.table