【问题标题】:Filling NA row using data from early date using dpylr in R使用 R 中的 dplyr 使用早期数据填充一行
【发布时间】:2021-11-29 01:47:35
【问题描述】:

我有数据:

set.seed(2021)
sales <- round(runif(672, 10, 50), 0)

我想将销售数据作为新列添加到数据框中。我的数据框是这样的:

library(lubridate)
library(tidyr)
gen_month <- function(first_datex){
  first_datex <- as.Date(first_datex)
  last_datex <- ceiling_date(first_datex, 'month') - 1
  expand_grid(datex = seq(first_datex, last_datex, by = 'day'), hourx = 0:23)
}
mydata <- gen_month("2021-03-01")

作为示例,我使用 March 作为 mydata。所以我们将 mydata 和 sales 结合起来。

set.seed(2021)
sales <- c(sales, rep(NA,72))
df <- data.frame(mydata, sales)

#tail(df)
#         datex hourx sales
#739 2021-03-31    18    NA
#740 2021-03-31    19    NA
#741 2021-03-31    20    NA
#742 2021-03-31    21    NA
#743 2021-03-31    22    NA
#744 2021-03-31    23    NA

但是,因为sales数据的长度小于mydata,所以我们使用df的早期数据填充3月份的NA数据。我希望的输出是:

df <- data.frame(mydata, sales2 = c(sales, sales[1:72]))
# head(df,72) & tail(df,72) should be same.

我的问题是

  1. 我们如何自动化这个过程?
  2. 如果销售数据的长度大于 mydata,我们需要对销售数据进行剪切,使其适合 mydata。我的第一个问题可以成为唯一的解决方案吗?

非常感谢。

【问题讨论】:

    标签: r dplyr tidyr plyr lubridate


    【解决方案1】:

    您可以根据mydata 中的行数对sales 数据进行子集化。

    mydata$sales <- sales[1:nrow(mydata)]
    

    【讨论】:

    • 我想我可以在某些情况下使用它来解决,谢谢队友
    【解决方案2】:

    我们也可以这样做

    mydata$sales <- sales[seq_len(nrow(mydata))]
    

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多