示例数据:
x <- data.frame(id=c(1,1,1,2,2,7,7,7,7,9,9,10),dna=c(232,424,5345,45345,45,345,4543,345345,4545,2323,23,1222))
date.seq <- as.Date(Sys.Date():as.Date("2014-09-10"))[1:length(unique(x$id))]
这里我填写每个id对应的日期。
data.frame(x,Dates=rep(date.seq,data.frame(table(x$id))$Freq))
给出:
id dna Dates
1 1 232 2014-08-16
2 1 424 2014-08-16
3 1 5345 2014-08-16
4 2 45345 2014-08-17
5 2 45 2014-08-17
6 7 345 2014-08-18
但是,我想任意分配日期序列的长度。期望输出日期超过3个id:
id dna Dates
1 1 232 16-08-2014
2 1 424 16-08-2014
3 1 5345 16-08-2014
4 2 45345 16-08-2014
5 2 45 16-08-2014
6 7 345 16-08-2014
7 7 4543 16-08-2014
8 7 345345 16-08-2014
9 7 4545 16-08-2014
10 9 2323 17-08-2014
11 9 23 17-08-2014
12 10 1222 18-08-2014
答案 0 :(得分:2)
首先创建id
的顺序列表,然后使用除法运算符将每个id分配给一个组。
x <- data.frame(id=c(1,1,1,2,2,7,7,7,7),dna=c(232,424,5345,45345,45,345,4543,345345,4545))
seq.id <- match(x$id,unique(x$id))
n <- 1
x$Dates <- Sys.Date() + (seq.id-1) %/% n
# id dna Dates
# 1 1 232 2014-08-16
# 2 1 424 2014-08-16
# 3 1 5345 2014-08-16
# 4 2 45345 2014-08-17
# 5 2 45 2014-08-17
# 6 7 345 2014-08-18
# 7 7 4543 2014-08-18
# 8 7 345345 2014-08-18
# 9 7 4545 2014-08-18
n <- 2
x$Dates <- Sys.Date() + (seq.id-1) %/% n
# id dna Dates
# 1 1 232 2014-08-16
# 2 1 424 2014-08-16
# 3 1 5345 2014-08-16
# 4 2 45345 2014-08-16
# 5 2 45 2014-08-16
# 6 7 345 2014-08-17
# 7 7 4543 2014-08-17
# 8 7 345345 2014-08-17
# 9 7 4545 2014-08-17
n <- 3
x$Dates <- Sys.Date() + (seq.id-1) %/% n
# id dna Dates
# 1 1 232 2014-08-16
# 2 1 424 2014-08-16
# 3 1 5345 2014-08-16
# 4 2 45345 2014-08-16
# 5 2 45 2014-08-16
# 6 7 345 2014-08-16
# 7 7 4543 2014-08-16
# 8 7 345345 2014-08-16
# 9 7 4545 2014-08-16