在 R 中的 Days 中创建任期列
Creating a tenure column in Days in R
我正在尝试在 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)))
我正在尝试在 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)))