为每个学生证分配多个日期

时间:2019-02-20 03:54:56

标签: r

我有一个学生ID列表,列出了1-30或student_id = c(1:30)。我现在如何使用R base包或dplyr函数为每个学生分配从01-01-2019到今天的日期。所需的输出类似于:

 Student_ID Date 
  1          01-01-2019
  1          01-02-2019
  1          01-03-2019
  1          01-04-2019 
  2          01-01-2019
  2          01-02-2019
  2          01-03-2019
  2          01-04-2019

3 个答案:

答案 0 :(得分:0)

为学生列表和日期列表创建一个数据框,并在没有任何键的情况下合并它们-

s<-data.frame(student_id=c(1:30))
d<-data.frame(date=seq.Date(as.Date("2019-01-01"), Sys.Date(), by = 'days'))
merge(s,d, all=TRUE)

答案 1 :(得分:0)

您可以尝试生成日期序列,然后根据需要重复该序列。以您的示例为例,假设您的data.frame被称为students

date <- seq(as.Date("01012019",format="%d%m%Y"),as.Date("04012019",format="%d%m%Y"),by=1)

students$Date <- rep(date, times = 4)

答案 2 :(得分:0)

考虑ave的分组运行计数,您可以将其添加到开始日期2019-01-01。这可以根据 Student_ID

调整为任意大小的分组
df$Date <- with(df, ave(Student_ID, Student_ID, FUN=seq_along)-1 + as.Date("2019-01-01"))

df    
#   Student_ID       Date
# 1          1 2019-01-01
# 2          1 2019-01-02
# 3          1 2019-01-03
# 4          1 2019-01-04
# 5          2 2019-01-01
# 6          2 2019-01-02
# 7          2 2019-01-03
# 8          2 2019-01-04

Rextester demo