Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将data.frame中不同工作日的日期列调整为一致的工作日_R_Date_Lubridate - Fatal编程技术网

将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 ranks
weekly\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