如何基于R

时间:2018-12-04 05:22:26

标签: r

我有一个数据框,其中包含商品的日期,位置和价格。对于特定日期,有多个位置(此处为13个);因此,对于每个日期位置对,都有13行,即Date1-Loc1,Date1-Loc2 .... Date1-Loc13,Date2-Loc1 ... Date2-Loc13,依此类推。

“日期”列包含2015年1月2日至2018年10月22日之间的数据。缺少价格缺少的“日期位置”对,因此我需要使用前几天基于位置的价格填充它们。

  For example
        Date Location Price 
      02-01-2015 Loc1 32000 <br/> 
       02-01-2015 Loc2 33452 <br/>
         02-01-2015 Loc3 30000 <br/>
....upto 02-01-2015 Loc13 32100<br/>
           03-01-2015 Loc1 NA <br/>
           03-01-2015 Loc2 NA
     .....03-01-2015 Loc13 NA<br/>

我需要将2015年1月3日-Loc1对的价格填充到2015年1月2日-Loc1对的价格,即32000。我已经编写了以下代码,但此刻我陷入了困境: 可复制的代码:

## by month
date=as.data.frame(seq(as.Date("2015/1/2"),as.Date("2015/10/22"),by = "day"))
tail(date)
#repeating rows for "date" in R
date2=as.data.frame(date[rep(seq_len(nrow(date)), each=13),])
colnames(date2)="x"

loc=c("Loc1",   "Loc2", "Loc3",
      "Loc4",   "Loc5", "Loc6", "Loc7",
      "Loc8",   "Loc9", "Loc10",
      "Loc11",  "Loc12",    "Loc13")
#repeating rows for "loc" in R
loc2=as.data.frame(rep(loc,times=1390))

#data binding
date_loc=cbind(date2,loc2)
names(date_loc)
colnames(date_loc)=c("publish_date","location")

#adding the price
price=runif(294, min=0, max=40000)

Df=cbind(date_loc,price)

Df$price[c(27:39,118:130)] <- NA

在这里考虑这样一个事实,即存在日期-日期对,而对于某些日期,价格缺失,如示例所示。

library(lubridate)
library(dplyr)
date3=date[rep(seq_len(nrow(date)), each=13),]
newdata2=newdata %>%
  mutate(price=ifelse(is.na(price),date3-days(1),
                      ??))

请帮助。预先感谢!

0 个答案:

没有答案