将data.frame中不同工作日的日期列调整为一致的工作日
我有一套截止日期的网球排名将data.frame中不同工作日的日期列调整为一致的工作日,r,date,lubridate,R,Date,Lubridate,我有一套截止日期的网球排名 date <- as.Date(c("1973-08-23","1973-09-13","1973-09-26","1973-10-15","1973-10-31")) ranking <- c(1,2,3,3,1) df <- data.frame(date,ranking) date ranking 1 1973-08-23 1 2 1973-09-13 2 3 1973-09-26 3 4
date <- as.Date(c("1973-08-23","1973-09-13","1973-09-26","1973-10-15","1973-10-31"))
ranking <- c(1,2,3,3,1)
df <- data.frame(date,ranking)
date ranking
1 1973-08-23 1
2 1973-09-13 2
3 1973-09-26 3
4 1973-10-15 3
5 1973-10-31 1
我想基于上面的数据创建一个data.frame(df2),这样排名每周都会在每个周一显示。结果将是
date ranking
1 1973-08-27 1
2 1973-09-03 1
3 1973-09-10 1
4 1973-09-17 2
5 1973-09-24 2
6 1973-10-01 3
7 1973-10-08 3
8 1973-10-15 3
9 1973-10-22 3
10 1973-10-29 3
11 1973-11-05 1
wday(df2$date) # [1] 2 2 2 2 2 2 2 2 2 2 2
这是有点简化,因为将有一个PlayerA,PlayerB等所有职级
非常感谢任何帮助您必须创建所需大小的空数据帧。然后创建一个for循环,在其中运行这个新的数据帧,并用最新的可用排名填充它。每次有新的排名,你都会给他下一行 更清楚地说:
j=1
for(i in 1:length(output[,1])){
if(as.numeric(output[i,1])>as.numeric(input[j,1])){
j=j+1
}
output[i,2:10] = input[j,2:10]
}
其中,
output
是一个数组,其行数与周一的行数相同,列数与玩家的列数相同(+1表示日期)您必须创建所需大小的空数据帧。然后创建一个for循环,在其中运行这个新的数据帧,并用最新的可用排名填充它。每次有新的排名,你都会给他下一行
更清楚地说:
j=1
for(i in 1:length(output[,1])){
if(as.numeric(output[i,1])>as.numeric(input[j,1])){
j=j+1
}
output[i,2:10] = input[j,2:10]
}
其中,
output
是一个数组,其行数与周一的行数相同,列数与玩家的列数相同(+1表示日期)weekly\u ranksweekly\u ranks理想的解决方案是data.table
加入roll=Inf
library(data.table)
df1 <- data.table(date=seq.Date(from=as.Date("1973-08-27"), to=as.Date("1973-11-05"), by=7))
setkey(setDT(df), date)
setkey(df1, date)
df[df1, roll=Inf]
# date ranking
# 1: 1973-08-27 1
# 2: 1973-09-03 1
# 3: 1973-09-10 1
# 4: 1973-09-17 2
# 5: 1973-09-24 2
# 6: 1973-10-01 3
# 7: 1973-10-08 3
# 8: 1973-10-15 3
# 9: 1973-10-22 3
#10: 1973-10-29 3
#11: 1973-11-05 1
库(data.table)
df1理想的解决方案是数据表
与roll=Inf
library(data.table)
df1 <- data.table(date=seq.Date(from=as.Date("1973-08-27"), to=as.Date("1973-11-05"), by=7))
setkey(setDT(df), date)
setkey(df1, date)
df[df1, roll=Inf]
# date ranking
# 1: 1973-08-27 1
# 2: 1973-09-03 1
# 3: 1973-09-10 1
# 4: 1973-09-17 2
# 5: 1973-09-24 2
# 6: 1973-10-01 3
# 7: 1973-10-08 3
# 8: 1973-10-15 3
# 9: 1973-10-22 3
#10: 1973-10-29 3
#11: 1973-11-05 1
库(data.table)
df1
library(data.table)
df1 <- data.table(date=seq.Date(from=as.Date("1973-08-27"), to=as.Date("1973-11-05"), by=7))
setkey(setDT(df), date)
setkey(df1, date)
df[df1, roll=Inf]
# date ranking
# 1: 1973-08-27 1
# 2: 1973-09-03 1
# 3: 1973-09-10 1
# 4: 1973-09-17 2
# 5: 1973-09-24 2
# 6: 1973-10-01 3
# 7: 1973-10-08 3
# 8: 1973-10-15 3
# 9: 1973-10-22 3
#10: 1973-10-29 3
#11: 1973-11-05 1