gpt4 book ai didi

r - 如何排除 R 中计算均值和标准差的月份

转载 作者:行者123 更新时间:2023-12-05 09:31:10 25 4
gpt4 key购买 nike

下面的代码生成了一个带有三条水平线的散点图,分别表示均值、均值+标准差和均值-标准差。为了计算这三个因素,我的 data 数据库中的所有日期都被考虑在内。

但是,我想在计算均值和标准差时排除四月份,我该怎么做?

可执行代码如下:

library(dplyr)
library(tidyr)
library(lubridate)


data <- structure(
list(Id=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
date1 = c("2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20",
"2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20",
"2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20",
"2021-06-20","2021-06-20","2021-06-20","2021-06-20"),
date2 = c("2021-07-01","2021-07-01","2021-07-01","2021-07-01","2021-04-02",
"2021-04-02","2021-04-02","2021-04-02","2021-04-02","2021-04-02","2021-04-03",
"2021-04-03","2021-04-03","2021-04-03","2021-04-03","2021-04-08","2021-04-08",
"2021-07-09","2021-07-09","2021-07-10","2021-07-10"),
Week= c("Thursday","Thursday","Thursday","Thursday","Friday","Friday","Friday","Friday",
"Friday","Friday","Saturday","Saturday","Saturday","Saturday","Saturday","Thursday",
"Thursday","Friday","Friday","Saturday","Saturday"),
DTPE = c("Ho","Ho","Ho","Ho","","","","","","","","","","","","","","","","Ho","Ho"),
D1 = c(8,1,9, 3,5,4,7,6,3,8,2,3,4,6,7,8,4,2,6,2,3), DR01 = c(4,1,4,3,3,4,3,6,3,7,2,3,4,6,7,8,4,2,6,7,3),
DR02 = c(8,1,4,3,3,4,1,6,3,7,2,3,4,6,7,8,4,2,6,2,3), DR03 = c(7,5,4,3,3,4,1,5,3,3,2,3,4,6,7,8,4,2,6,4,3),
DR04= c(4,5,6,7,3,2,7,4,2,1,2,3,4,6,7,8,4,2,6,4,3),DR05 = c(9,5,4,3,3,2,1,5,3,7,2,3,4,7,7,8,4,2,6,4,3)),
class = "data.frame", row.names = c(NA, -21L))


graph <- function(dt, dta = data) {

dim_data<-dim(data)

day<-c(seq.Date(from = as.Date(data$date2[1]), by = "days",
length = dim_data[1]
))

data_grouped <- data %>%
mutate(across(starts_with("date"), as.Date)) %>%
group_by(date2) %>%
summarise(Id = first(Id),
date1 = first(date1),
Week = first(Week),
DTPE = first(DTPE),
D1 = sum(D1)) %>%
select(Id,date1,date2,Week,DTPE,D1)

data_grouped %>%
mutate(DTPE = na_if(DTPE, ""))

df_OC<-subset(data_grouped, DTPE == "")
ds_CO = df_OC %>% filter(weekdays(date2) %in% weekdays(as.Date(dt)))

mean<-mean(ds_CO$D1)
sd<-sd(ds_CO$D1)


dta %>%
filter(date2 == ymd(dt)) %>%
summarize(across(starts_with("DR"), sum)) %>%
pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
mutate(name = as.numeric(name)) %>%
plot(xlab = "Days", ylab = "Number", xlim = c(0, 45),cex=1.5,cex.lab=1.5,
cex.axis=1.5, cex.main=2, cex.sub=2, lwd=2.5, ylim = c((min(.$val) %/% 10) * 15, (max(.$val) %/% 10 + 1) * 100))
abline(h=mean, col='blue') +
abline(h=(mean + sd), col='green',lty=2)
abline(h=(mean - sd), col='orange',lty=2)

}
graph("2021-07-10",data)

最佳答案

data %>%
filter("04" != format(as.Date(date2), format = "%m"))
# Id date1 date2 Week DTPE D1 DR01 DR02 DR03 DR04 DR05
# 1 1 2021-06-20 2021-07-01 Thursday Ho 8 4 8 7 4 9
# 2 1 2021-06-20 2021-07-01 Thursday Ho 1 1 1 5 5 5
# 3 1 2021-06-20 2021-07-01 Thursday Ho 9 4 4 4 6 4
# 4 1 2021-06-20 2021-07-01 Thursday Ho 3 3 3 3 7 3
# 5 1 2021-06-20 2021-07-09 Friday 2 2 2 2 2 2
# 6 1 2021-06-20 2021-07-09 Friday 6 6 6 6 6 6
# 7 1 2021-06-20 2021-07-10 Saturday Ho 2 7 2 4 4 4
# 8 1 2021-06-20 2021-07-10 Saturday Ho 3 3 3 3 3 3

(我建议您永久在框架中制作 date1date2 合适的 Date 对象,而不是转换它每次你做某事时。虽然转换相对便宜,但也没有必要,忘记它的后果可能是结果的细微差别(即,将其视为分类变量副连续/离散序数)。

关于r - 如何排除 R 中计算均值和标准差的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69036501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com