【发布时间】:2019-07-12 15:47:35
【问题描述】:
我正在尝试构建一个保留的同类群组表,但我无法将其设置为返回每个时期的不同计数 ID,而与第一次看到的时间无关(与第一次看到的时期无关)数据)。
我一直在尝试一个解决方案,但大多数情况下,我会在每个时期获得新用户,而不是如果他们出现在该时期中,而不管他们是否出现在上一个时期。
例如:对于这组值:
id quarter
7 Q1
7 Q1
5 Q1
8 Q1
3 Q1
6 Q1
10 Q1
3 Q2
10 Q2
8 Q2
2 Q2
7 Q2
6 Q2
6 Q3
9 Q3
6 Q3
4 Q3
9 Q3
2 Q3
5 Q4
8 Q4
10 Q4
7 Q4
1 Q4
8 Q4
而不是这样:(如果用户第一次出现在数据中,则仅将其计入同类群组)
# [,1] [,2] [,3] [,4]
#Q1 6 5 1 5
#Q2 1 1 0 0
#Q3 2 0 0 0
#Q4 1 0 0 0
我想要这个:(无论是第一次出现,如果他出现在该时间段内,则该用户被计入同类群组)
# [,1] [,2] [,3] [,4]
#Q1 6 5 1 4
#Q2 6 2 3 0
#Q3 4 0 0 0
#Q4 5 0 0 0
我尝试过的:
test <- list(id = c(7, 7, 5, 8, 3, 6, 10, 3, 10, 8, 2, 7, 6,
6, 9, 6, 4, 9, 2, 5, 8, 10, 7, 1, 8), quarter = c("Q1", "Q1",
"Q1", "Q1", "Q1", "Q1", "Q1", "Q2", "Q2", "Q2", "Q2", "Q2", "Q2",
"Q3", "Q3", "Q3", "Q3", "Q3", "Q3", "Q4", "Q4", "Q4", "Q4", "Q4",
"Q4"))
test <- as.data.table(test)
quarts <- sort(unique(test$quarter))
test$occur <- 1
mat <- dcast.data.table(test, id ~ quarter, value.var = "occur", fun.aggregate = sum)
mat[mat > 1] <- 1
mat<-as.data.frame(mat)
res2<-matrix(0, nrow = ncol(mat)-1, ncol = ncol(mat)-1)
res2<-as.data.frame(res2)
i<-2
for (i in 2:ncol(mat)){
res2[i-1,1]<-sum(mat[,i])
}
for (i in 2:ncol(mat)){
for (t in 1:nrow(mat)){
if (mat[t,i] > 0) {
res2[i-1,i]<-res2[i-1,i]+mat[i,i+1]
}
}
}
但它给了我一个错误。 将不胜感激任何建议。 谢谢!
【问题讨论】: