R 为实验日创建变量

R 为实验日创建变量,r,date,R,Date,我有一个跨越一个月的大型数据集,数据印在名为txn_date的列中,如下所示。(这是它的玩具复制品) dat1我们根据'txn_date'的min和max和match dates <- seq(min(as.Date(dat1$txn_date)), max(as.Date(dat1$txn_date)), by = '1 day') dat1$day <- with(dat1, match(as.Date(txn_date), dates)) dat1$da

我有一个跨越一个月的大型数据集,数据印在名为
txn_date
的列中,如下所示。(这是它的玩具复制品)


dat1我们根据'txn_date'的
min
max
match

dates <- seq(min(as.Date(dat1$txn_date)), 
           max(as.Date(dat1$txn_date)), by = '1 day')
dat1$day <- with(dat1, match(as.Date(txn_date), dates))
dat1$day
#[1] 1 1 2 3 3 7 8 9

这样合适吗

library(tidyverse)
dat1 <- read.table(text = "var1 txn_date 
5 2020-10-25
1 2020-10-25
3 2020-10-26
4 2020-10-27
1 2020-10-27 
3 2020-10-31  
3 2020-11-01 
8 2020-11-02 ", header = TRUE)

dat1$txn_date <- as.Date(dat1$txn_date)
dat1 %>% 
  mutate(days = txn_date - txn_date[1] + 1)
#  var1   txn_date   days
#1    5 2020-10-25 1 days
#2    1 2020-10-25 1 days
#3    3 2020-10-26 2 days
#4    4 2020-10-27 3 days
#5    1 2020-10-27 3 days
#6    3 2020-10-31 7 days
#7    3 2020-11-01 8 days
#8    8 2020-11-02 9 days
库(tidyverse)

dat1我觉得这更符合逻辑。日期只是整数,所以减法很好用。
dates <- seq(min(as.Date(dat1$txn_date)), 
           max(as.Date(dat1$txn_date)), by = '1 day')
dat1$day <- with(dat1, match(as.Date(txn_date), dates))
dat1$day
#[1] 1 1 2 3 3 7 8 9
with(dat1, as.integer(factor(txn_date, levels = as.character(dates))))
#[1] 1 1 2 3 3 7 8 9
library(tidyverse)
dat1 <- read.table(text = "var1 txn_date 
5 2020-10-25
1 2020-10-25
3 2020-10-26
4 2020-10-27
1 2020-10-27 
3 2020-10-31  
3 2020-11-01 
8 2020-11-02 ", header = TRUE)

dat1$txn_date <- as.Date(dat1$txn_date)
dat1 %>% 
  mutate(days = txn_date - txn_date[1] + 1)
#  var1   txn_date   days
#1    5 2020-10-25 1 days
#2    1 2020-10-25 1 days
#3    3 2020-10-26 2 days
#4    4 2020-10-27 3 days
#5    1 2020-10-27 3 days
#6    3 2020-10-31 7 days
#7    3 2020-11-01 8 days
#8    8 2020-11-02 9 days