【问题标题】:Cohort analysis in R (independent of first time seen)R中的队列分析(独立于第一次看到)
【发布时间】: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]
    } 
  }
}

但它给了我一个错误。 将不胜感激任何建议。 谢谢!

【问题讨论】:

    标签: r retention


    【解决方案1】:

    我想我已经为任何需要它的人找到了它:

    library (dplyr)
    library(data.table)
    
    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.frame(test)
    quarters <- as.vector(unique(test$quarter))
    
    f<-1
    my_list <- list()
    for(i in quarters) {
      print(i)
      d1<- setDT(test)[, sum(unique(id) %in% test[quarter==i, id]), by = quarter]
      print(d1)
      my_list[[f]]<- d1[,2]
      f=f+1
    }
    print(my_list)
    
    mydf <- data.frame(my_list)
    print(mydf)
    final<-mydf
    for (i in 1:ncol(mydf)){
    final<-final %>% mutate_at(c(i), funs(lead), n = i-1 )
    }
    print(final)
    final <-t(final)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      相关资源
      最近更新 更多