对某些营销分析进行培训。
在此数据集中:
head(software_data)
id Usage software_v
1 2011-12-01 v12
2 2011-12-01 v12
3 2011-12-01 v12
4 2011-12-01 v12
5 2011-12-02 v12
6 2011-12-02 v12
如何在每个软件版本中找到一个月的活跃用户(MAU)?
考虑到活动是指一个人在一个月内多次使用该软件。
我这样做了:
table(software_data$software_v)
返回每个版本的人数,但不是根据每月多于一次的条件而不是唯一的。此外,如果您在前一行的前面插入唯一,则它不会提供唯一但与没有它的结果相同的结果。
答案 0 :(得分:0)
在这种数据操作中,我喜欢使用非常适合此请求的SQL类型查询。 我将使用SQLDF包执行以下操作。
library(sqldf)
sqldf("
select id, strftime('%m', Usage) as month, software_v, count(strftime('%m', Usage)) as count
from software_data
group by id, strftime('%m', Usage), software_v
having count > 1
")
答案 1 :(得分:0)
如果您的使用列是您可以执行的日期
require(dplyr);require(lubridate)
df %>%
group_by(id, month(Usage), software_v) %>%
filter(n() > 1) %>%
ungroup() %>%
group_by(month(Usage), software_v) %>%
mutate(MAU = n())
或者你可以使用sql。 @stusky有正确的想法,但实际上并没有计算MAU。你可以做到
library(sqldf)
sqldf("
select count(*) as MAU
, month
, software_v
from (
select id
, strftime('%m', Usage) as month
, software_v
, count(strftime('%m', Usage)) as count
from df
group by id,
strftime('%m', Usage),
software_v
)
where count > 1
group by month
, software_v
")
答案 2 :(得分:0)
编辑:意识到它可能更简单。
第二次编辑:也调整了一个月的帐户。
首先让我们从你的数据中获取一个月的变量。
如果尚未确定Usage
列的类型为Date
。
software_data$Usage <- as.Date(software_data$Usage)
一旦它是类型日期,我们可以将其压缩到年 - 月日期列。
software_data$Usage_Year_Month <- format(software_data$Usage, format = "%Y-%m")
一旦你的数据帧处于这种形式,从这个到mau2
的输出只有3行代码。
mau <- ddply(software_data, c("id", "software_v", "Usage_Year_Month"), nrow)
mau <- mau[mau[,4] > 1,]
mau2 <- ddply(mau, c("software_v", "Usage_Year_Month"), nrow)
现在让我解释一下。
我们可以使用ddply
(来自plyr
包)将nrow
函数应用于数据的每个子集。因此,我们在id
,software_v
和我们创建的变量Usage_Year_Month
上进行了子集,然后我们的函数返回该子组中的行数。然后在最后我们只需要过滤,所以我们只保留那些值大于1的行。
mau <- ddply(software_data, c("id", "software_v"), numcolwise(length))
mau <- mau[mau[,4] > 1,]
我已经设置了一个如下数据的模拟示例(只选择了Usage
的任意日期序列。)
id = round(runif(100)*5)
id = c(id, seq(6,10))
Usage = seq(as.Date("2011-12-01"), as.Date("2011-12-01")+length(id)-1, by = "+1 day")
software_v = round(runif(length(id))*3)
software_data <- data.frame(id, Usage, software_v)
software_data$Usage_Year_Month <- format(software_data$Usage, format = "%Y-%m")
使用此输入代码生成以下内容。
V1
列包含每个唯一id
,software_v
和Usage_Year_Month
分组的用例数。如果您只想要具有多个用例的唯一ID,请使用unique(mau$id)
。
如果您因软件版本和月份而想要这个,那么让我们再来一次ddply
。
mau2 <- ddply(mau, c("software_v", "Usage_Year_Month"), nrow)
在此输出中,software_v
是唯一的软件版本,Usage_Year_Month
是匹配的年份和月份,V1
包含多次使用此版本的唯一身份用户数量特定月份的特定软件版本。