R 查找新用户数

R 查找新用户数,r,R,我用的是R,有一张玩某个网络游戏的人的数据表 userId, login, country 132, 2017-01-01, A 133, 2017-01-01, B 133, 2018-01-01, B 432, 2018-01-01, A 我想找出2018年每个国家的新用户数量,定义为2018年登录但不是2017年的用户数量。例如,如果上述数据表是整个数据表,那么国家A在2018年将有1个新用户(用户432),而国家B将有0个新用户(用户133在

我用的是R,有一张玩某个网络游戏的人的数据表

userId,  login,      country
132,     2017-01-01, A
133,     2017-01-01, B
133,     2018-01-01, B
432,     2018-01-01, A
我想找出2018年每个国家的新用户数量,定义为2018年登录但不是2017年的用户数量。例如,如果上述数据表是整个数据表,那么国家A在2018年将有1个新用户(用户432),而国家B将有0个新用户(用户133在2017年登录)


做这件事的最快方法是什么?

使用
数据。如果你有一个大数据集,table
可能是最快的

library(data.table)
setDT(data)
data[, login := as.Date(login)]
data[, .(year = min(year(login)), country), by = userId
     ][, sum(year == 2018), by = country]
   country V1
1:       A  1
2:       B  0
其中数据:

data <- fread("userId,  login,      country
132,     2017-01-01, A
133,     2017-01-01, B
133,     2018-01-01, B
432,     2018-01-01, A")
数据%
变异(年=年(截止日期(登录)))%>%
分组人(用户ID)%>%
总结(myear=min(年),国家=唯一(国家))%>%
按(国家)划分的组别%>%
总结(n_新用户=sum(myear==2018))
国家/地区n_新用户
1 A 1
2B0
Edit2:在base R中使用类似的逻辑(可能不是最好的)(使用一些管道更容易跟踪):

data$year%
合计(年份~用户ID+国家/地区,分钟)%>%
合计(年份-国家,函数(x)和(x==2018))
国家年
1 A 1
2B0

使用
数据。如果您有一个大的数据集,table
可能是最快的

library(data.table)
setDT(data)
data[, login := as.Date(login)]
data[, .(year = min(year(login)), country), by = userId
     ][, sum(year == 2018), by = country]
   country V1
1:       A  1
2:       B  0
其中数据:

data <- fread("userId,  login,      country
132,     2017-01-01, A
133,     2017-01-01, B
133,     2018-01-01, B
432,     2018-01-01, A")
数据%
变异(年=年(截止日期(登录)))%>%
分组人(用户ID)%>%
总结(myear=min(年),国家=唯一(国家))%>%
按(国家)划分的组别%>%
总结(n_新用户=sum(myear==2018))
国家/地区n_新用户
1 A 1
2B0
Edit2:在base R中使用类似的逻辑(可能不是最好的)(使用一些管道更容易跟踪):

data$year%
合计(年份~用户ID+国家/地区,分钟)%>%
合计(年份-国家,函数(x)和(x==2018))
国家年
1 A 1
2B0

库(dplyr)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集
文本%
过滤器(年==2018年)%>%
反加入(svnt\u peeps,“userId”)%>%
按(国家)划分的组别%>%
计数()
#>#A tible:1 x 2
#>#群体:国家[1]
#>国家
#>      
#>1“A”1

库(dplyr)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集
文本%
过滤器(年==2018年)%>%
反加入(svnt\u peeps,“userId”)%>%
按(国家)划分的组别%>%
计数()
#>#A tible:1 x 2
#>#群体:国家[1]
#>国家
#>      
#>1“A”1

以下是我的选择:

require(dplyr)
require(lubridate)
data %>%
  mutate(years = year(as.Date(login))) %>%
  group_by(userId) %>%
  mutate(n = n()) %>% # n will be >1 if a user is not new 
  filter(n == 1, years == "2018") %>% # filter for n == 1 and year 2018
  group_by(country) %>% 
  count()

以下是我的选择:

require(dplyr)
require(lubridate)
data %>%
  mutate(years = year(as.Date(login))) %>%
  group_by(userId) %>%
  mutate(n = n()) %>% # n will be >1 if a user is not new 
  filter(n == 1, years == "2018") %>% # filter for n == 1 and year 2018
  group_by(country) %>% 
  count()

你的意思是“B”没有条目吗?哦,我更喜欢你的答案(dplyr版本)对不起,是的,我的意思是B。你的意思是“B”没有条目吗?哦,我更喜欢你的答案(dplyr版本)对不起,是的,我的意思是B。答案也比我的好:)答案也比我的好:)