在R中按月检索客户端的唯一比例

在R中按月检索客户端的唯一比例,r,database,dplyr,percentage,event-log,R,Database,Dplyr,Percentage,Event Log,我正在使用一个记录用户驱动事件的大型电子数据库。基本上,我希望获得全年每月新用户对服务的比例/百分比。以下只是数据的模拟示例:- UserId Month UserEventId Tyrhjj01 Jan 0998907 Fghhey21 Jan 0989892 Hyhkio52 Jan 7782901 hejdoe78 Jan 3889201 Tyrhjj01 Feb 782

我正在使用一个记录用户驱动事件的大型电子数据库。基本上,我希望获得全年每月新用户对服务的比例/百分比。以下只是数据的模拟示例:-

    UserId    Month   UserEventId

    Tyrhjj01   Jan     0998907
    Fghhey21   Jan     0989892
    Hyhkio52   Jan     7782901
    hejdoe78   Jan     3889201
    Tyrhjj01   Feb     7829930
    sjjwilsn   Feb     7728910
    Tyrhjj01   Feb     9203749
    nnkilo89   Feb     7728912
    Fghhey21   Feb     4463782
……等等。如您所见,有些客户定期使用该服务,而有些客户在2月份是独一无二的。我想了解一个百分比的老客户和系统特有的客户。我附上一个插图,以帮助更好地理解

新客户与旧客户的百分比:


我尝试了dplyr和data.table中的几个示例,但没有成功。任何帮助都将不胜感激

如果您为每个月创建一个具有唯一用户的新数据集,则可以使用
data.table
中的
rowid
查看它们在前几个月是否出现在
df

library(data.table)
setDT(df)

users <- df[, .(user = unique(UserId)), Month] 
users[, visit := rowid(user)] # create variable for number of months user has visited
users[, .(new_pct = mean(visit == 1)), Month] 

#    Month new_pct
# 1:   Jan     1.0
# 2:   Feb     0.5
使用的数据:

df <- fread("
UserId    Month   UserEventId
Tyrhjj01   Jan     0998907
Fghhey21   Jan     0989892
Hyhkio52   Jan     7782901
hejdoe78   Jan     3889201
Tyrhjj01   Feb     7829930
sjjwilsn   Feb     7728910
Tyrhjj01   Feb     9203749
nnkilo89   Feb     7728912
Fghhey21   Feb     4463782
")

df到目前为止您尝试了什么,您编写了什么代码来获得该绘图?你到底是如何定义旧的还是新的?@camille好的,所以首先我尝试(原谅我,对R来说还是比较新的):setDT(df)[,(count=uniqueN(UserId)),by=Month]没有达到预期的结果。然后我尝试使用dplyr:-df%>%group\u by(Month)%>%summary(n=n\u distinct(UserId))认为我可以手工计算新老客户的比例。但仍然不是期望的结果。请使用
dput()
(而不是
str
head
或图片/屏幕截图)和您正在处理的代码共享您的数据样本,以便其他人可以提供帮助。请参阅此处的更多信息@camille旧客户是当月以前使用过服务的客户,新客户是指当月以前未使用过服务的客户。希望这能澄清问题:)@Tung谢谢。这张图片只是为了向其他人说明我正在努力实现的目标。两种解决方案都很有效,尤其是数据表一!非常感谢:)
df <- fread("
UserId    Month   UserEventId
Tyrhjj01   Jan     0998907
Fghhey21   Jan     0989892
Hyhkio52   Jan     7782901
hejdoe78   Jan     3889201
Tyrhjj01   Feb     7829930
sjjwilsn   Feb     7728910
Tyrhjj01   Feb     9203749
nnkilo89   Feb     7728912
Fghhey21   Feb     4463782
")