【问题标题】:Inserting new data into a table将新数据插入表中
【发布时间】:2021-09-27 13:22:57
【问题描述】:

我想对以下问题有所帮助:请注意,此代码从我选择的日期生成一个系数,在这种情况下,对于 03/07 (dmda),它给出的系数等于 15.55。在这种情况下,我想生成一个新表,其中有一列带有日期,另一列带有与这些日期对应的系数。对于列日期,仅考虑 date1 (28/06) 中考虑的日期之后的 date2 日期,在这种情况下,日期为:01/07、02/07 和 03/07。

所以表格将如下所示:

谢谢!

library(dplyr)
library(tidyverse)
library(lubridate)

df1 <- structure(
  list(date1 = c("2021-06-28","2021-06-28","2021-06-28","2021-06-28","2021-06-28",
                 "2021-06-28","2021-06-28","2021-06-28"),
       date2 = c("2021-04-02","2021-04-03","2021-04-08","2021-04-09","2021-04-10","2021-07-01","2021-07-02","2021-07-03"),
       Week= c("Friday","Saturday","Thursday","Friday","Saturday","Thursday","Friday","Monday"),
       DR01 = c(14,11,14,13,13,14,13,16), DR02= c(14,12,16,17,13,12,17,14),DR03= c(19,15,14,13,13,12,11,15),
       DR04 = c(15,14,13,13,16,12,11,19),DR05 = c(15,14,15,13,16,12,11,19),
       DR06 = c(21,14,13,13,15,16,17,18),DR07 = c(12,15,14,14,19,14,17,18)),
  class = "data.frame", row.names = c(NA, -8L))

dmda<-"2021-07-03"

datas<-df1 %>%
  filter(date2 == ymd(dmda)) %>%
  summarize(across(starts_with("DR"), sum)) %>%
  pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
  mutate(name = as.numeric(name))
colnames(datas)<-c("Days","Numbers")

mod <- nls(Numbers ~ b1*Days^2+b2,start = list(b1 = 47,b2 = 0), data = datas)
coef(mod)[2]
> coef(mod)[2]
      b2 
15.55011 

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以subset 'date2' 大于 date1' 的数据,将 'date2' 列提取为向量。使用map(来自purrr)循环日期,在循环内进行转换,构建nls 并在tibble 中提取coefficient,然后使用_dfr 折叠@987654328 @给单个tibble

    library(purrr)
    library(dplyr)
    dates <- subset(df1, date2 > date1, select = date2)$date2
    map_dfr(dates, ~ {
     
       datas <- df1 %>%
      filter(date2 == ymd(.x)) %>%
      summarize(across(starts_with("DR"), sum)) %>%
      pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
      mutate(name = as.numeric(name))
    colnames(datas)<-c("Days","Numbers")
    mod <- nls(Numbers ~ b1*Days^2+b2,start = list(b1 = 47,b2 = 0), data = datas)
      tibble(dates = .x, coef = coef(mod)[2])
       }) %>%
       mutate(dates = format(ymd(dates), "%d/%m/%Y"))
    # A tibble: 3 × 2
      dates       coef
      <chr>      <dbl>
    1 01/07/2021  12.2
    2 02/07/2021  12.4
    3 03/07/2021  15.6
    

    【讨论】:

    • 阿克伦,感谢您的回复!或多或少是这样,但在我没有很好地解释问题之前,我调整了问题的结尾以便更好地理解。我把输出表给你看看它的样子。
    • @JSouza dmda&lt;-"2021-07-03" 是从数据中选择的还是随机的
    • 这是df1数据库的date2的最后日期
    • @JSouza 更新对你有帮助吗
    • @JSouza 更新了帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2012-04-25
    • 2011-06-12
    相关资源
    最近更新 更多