我有 2 个代码来操作和过滤(按日期)我的 data.frame 并且工作得很好。现在我不仅要运行一天的代码,而且要在向量中的每一天运行代码:
seq(from=as.Date('2020-03-02'), to=Sys.Date(),by='days')` #.... 538 days
我想在 2020-03-02 和今天之间的所有日子里运行的代码是:
KOKOKO <- data.frame %>%
filter(DATE < '2020-03-02')%>%
summarize(DATE = '2020-03-02', CZK = sum(Objem.v.CZK,na.rm = T)
STAVPTF <- data.frame %>%
filter (DATE < '2020-03-02')%>%
group_by(CP) %>%
summarize(mnozstvi = last(AKTUALNI_MNOZSTVI_AKCIE), DATE = '2020-03-02') %>%
select(DATE,CP,mnozstvi) %>%
rbind(KOKOKO)%>%
drop_na() %>%
因此,我想一个接一个地填写自“2020-03-02”以来的所有日子,而不是“2020-03-02”。像这样为独特的一天创建的每个 KOKOKO 和 STAVPTF 我想将它们保存为单独的 data.frame,并将它们全部存储在一个列表中。
答案 0 :(得分:2)
我们可以使用 map
遍历序列并应用代码
library(dplyr)
library(purrr)
out <- map(s1, ~ data.frame %>%
filter(DATE < .x)%>%
summarize(DATE = .x, CZK = sum(Objem.v.CZK,na.rm = TRUE))
由于这是一个重复的循环,一个函数会使它更干净
f1 <- function(dat, date_col, group_col, Objem_col, aktualni_col, date_val) {
filtered <- dat %>%
filter({{date_col}} < date_val)
KOKOKO <- filtered %>%
summarize({{date_col}} := date_val,
CZK = sum({{Objem_col}}, na.rm = TRUE)
STAVPTF <- filtered %>%
group_by({{group_col}}) %>%
summarize(mnozstvi = last({{aktualni_col}}),
{{date_col}} := date_val) %>%
select({{date_col}}, {{group_col}}, mnozstvi) %>%
bind_rows(KOKOKO)%>%
drop_na()
return(STAVPTF)
}
并调用为
map(s1, ~ f1(data.frame, DATE, CP, Objem.v.CZK, AKTUALNI_MNOZSTVI_AKCIE, !!.x))
哪里
s1 <- seq(from=as.Date('2020-03-02'), to=Sys.Date(), by='days')
答案 1 :(得分:0)
如果您能提供一个最小的可重现示例,那么回答您的问题会更容易。使用 tidyverses reprex packages
很容易做到但是,您的 KOKOKO 代码可以重写为简单的累积和:
frontend http-in
option httplog
bind *:80
bind *:443 ssl crt /usr/local/etc/haproxy/haproxy.cfg/certs/
timeout http-request 60s
timeout http-keep-alive 4s
acl https ssl_fc
http-request set-header X-Forwarded-Proto http if !https
http-request set-header X-Forwarded-Proto https if https
stats uri /haproxy?examplehaproxystats74581257445
log-format %{+Q}o\ %{-Q}ci\ -\ -\ [%T]\ %r\ %ST\ %B\ \"\"\ \"\"\ %cp\ %ms\ %ft\ %b\ %s\ \%Tq\ $
acl sede_acl req.hdr(host) -i -m str sede.example.com.br
# redirect code 301 prefix https://sede.example.pub if sede_acl
use_backend sede_acl if sede_acl
backend sede_acl
http-request set-header Host sede.example.pub
server sede-server sede.example.pub:443 sni sede.example.pub ssl
即使是 STAVPTF 代码也可能无需迭代即可重写。首先找到每个CP和DATE的AKTUALNI_MNOZSTVI_AKCIE的最后一个值。然后将此值分配给下一个 DATE:
KOKOKO =
data.frame %>%
arrange(DATE) %>% # if necessary
group_by(DATE) %>%
summarise(CZK = sum(Objem.v.CZK), .groups = 'drop') %>% # summarise per DATE (if necessary)
mutate(CZK = cumsum(CZK) - CZK) # cumulative sum excluding current row (current DATE)