在R中的Days中创建一个tenure列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中的Days中创建一个tenure列相关的知识,希望对你有一定的参考价值。
*编辑
我正在尝试在df中创建一个列,向我显示客户任期内的日期编号。以下是为此创建模拟df的代码: -
Date<-c("20/07/2018", "21/07/2018", "25/07/2018", "02/08/2018", "05/08/2018", "10/08/2018")
ClientId<-c("aaa", "bbb", "ccc", "aaa", "bbb", "ccc")
EventId<-c("klk109", "rrt234", "hjk786", "yyu777", "tyw909", "nnl991")
dateclient<-cbind(Date, ClientId)
LoginDates<-cbind(dateclient, EventId)
View(LoginDates)
哪个应该给你这样的东西: -
head(LoginDates)
Date ClientId EventId
"20/07/2018" "aaa" "klk109"
"21/07/2018" "bbb" "rrt234"
"25/07/2018" "ccc" "hjk786"
"02/08/2018" "aaa" "yyu777"
"05/08/2018" "bbb" "tyw909"
"10/08/2018" "ccc" "nnl991"
基本上,我想创建一个列添加到这样的结尾
Date ClientId EventId tenureDay
"20/07/2018" "aaa" "klk109" 1
"21/07/2018" "bbb" "rrt234" 1
"25/07/2018" "ccc" "hjk786" 1
"02/08/2018" "aaa" "yyu777" 13
"05/08/2018" "bbb" "tyw909" 15
"10/08/2018" "ccc" "nnl991" 16
但是,我在我的数据集中的主要问题(上面是模拟df),一些客户每天有多个交互(有些已经有10个,20个等等)。我写的代码(“for”循环和一些data.table代码)返回了交互次数(或EventIds),而不是任期中的日期数。如果客户已经在服务中工作了10天并且在那段时间内已经进行过4次交互,那么我希望tenureDay列代表他们在特定交互发生的任期。
希望这是有道理的,大大提前谢谢你! :)
答案
谢谢你修改这个问题!
为了再现性:
LoginDates <- fread("Date ClientId EventId
2018-07-20 aaa klk109
2018-07-21 bbb rrt234
2018-07-25 ccc hjk786
2018-08-02 aaa yyu777
2018-08-05 bbb tyw909
2018-08-10 ccc nnl991")
使用dplyr
,你可以试试这个:
LoginDates %>%
group_by(ClientId) %>%
mutate(tenureDay = as.Date(Date) - head(as.Date(Date),1))
我真的希望这能解决你的问题!
编辑:
如果您不希望您的结果显示为x Days
,请尝试:
LoginDates %>%
group_by(ClientId) %>%
mutate(tenureDay = as.numeric(as.Date(Date) - head(as.Date(Date),1)))
以上是关于在R中的Days中创建一个tenure列的主要内容,如果未能解决你的问题,请参考以下文章
DAX - 根据事实表中的最新数据运行日期在日期维度表中创建滚动的“过去 7 天内”TRUE/FALSE 列
如何在 SQL Server 中创建忽略 NULL 值的计算几何列