我有一个学生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
答案 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