r - 在 R 中关联两个用于图形生成的代码
问题描述
我需要一些有关我拥有的两个代码的帮助:如您所见,第一个代码从我从我的df dataset
. 第二个代码也从我选择的日期生成一个子集。
我想要做的是:我需要在代码 1 生成的图形中用我y dataset
从代码 2 中得到的点画一条线。
需要注意的是,我选择了 2021 年 1 月 7 日这两个代码。在这种情况下,在建立这种关系时考虑到这一点很重要,因为我选择的每个日期都是不同的图表或不同的子集。
代码 1
library(dplyr)
library(lubridate)
library(tidyverse)
df <- 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(4,1,4,3,3,4,3,6), DR02= c(4,2,6,7,3,2,7,4),DR03= c(9,5,4,3,3,2,1,5),
DR04 = c(5,4,3,3,6,2,1,9),DR05 = c(5,4,5,3,6,2,1,9),
DR06 = c(2,4,3,3,5,6,7,8),DR07 = c(2,5,4,4,9,4,7,8)),
class = "data.frame", row.names = c(NA, -8L))
dmda<-"2021-07-01"
dta<-df
datas<-dta %>%
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")
attach(datas)
plot(Numbers ~ Days, ylim=c(0,20))
model <- nls(Numbers ~ b1*Days^2+b2,start = list(b1 = 47,b2 = 0))
new.data <- data.frame(Days = seq(min(Days),max(Days),len = 45))
lines(new.data$Days,predict(model,newdata = new.data))
代码 2
df <- 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(4,1,4,3,3,4,3,6), DR02= c(4,2,6,7,3,2,7,4),DR03= c(9,5,4,3,3,2,1,5),
DR04 = c(5,4,3,3,6,2,1,9),DR05 = c(5,4,5,3,6,2,1,9),
DR06 = c(2,4,3,3,5,6,7,8),DR07 = c(2,5,4,4,9,4,7,8)),
class = "data.frame", row.names = c(NA, -8L))
df[, 1:2] = lapply(df[, 1:2], FUN = as_date)
get_cutoff = function(date) {
date2 = as_date(date)
date1 = df[1,1]
as.numeric(date2 - date1 + 1)
}
subset_data = function(date, start_index) {
date = as_date(date)
if (date > df[1,1]) {
end_index = start_index + get_cutoff(date) - 1
df[, -c(start_index:end_index)] %>%
filter(date2 == date)
} else {
return(df)
}
}
y<-subset_data("2021-07-01", 4)
y
date1 date2 Week DR05 DR06 DR07
1 2021-06-28 2021-07-01 Thursday 2 6 4
DR05
,DR06
并且DR07
对应于图中(x 轴)中的第 5、6 和 7 天。2、6 和 4 是数字(y 轴)。
解决方案
推荐阅读
- vb.net - 如何使用 datetime 制作 if else 语法(仅限时间)
- docker - 在 Docker 容器中找不到入口文件
- sass - 使用 SASS 函数主题颜色级别在引导程序 4 中创建自定义渐变
- git - 如何重新启动或删除我的 travis 上的所有内容以重新开始
- json - 如何在字典相同的键中附加字典
- c# - InOrder 遍历只到第一个左节点然后出错?
- google-cloud-storage - 区域与多区域存储桶
- r - 因子(0)是什么意思?
- html - 水平 ::after line/bar 在段落之后显示,而不是标题
- javascript - 控制器在没有 replay 的情况下不返回结果。使用 fastify 平台发送