purrr ::映射和滞后函数,带嵌套数据框的语法

问题描述 投票:0回答:1

我正在努力对嵌套数据帧上的元素执行操作的语法。使用此示例:

> df1 <- tibble(P=c(101,101,102,102,103,103,101,101,102,102,103,103))
> df2 <- tibble(C=c(1,2,1,2,1,2,1,2,1,2,1,2))
> df3 <- tibble(SmpDate=as.Date(c("2019-11-01","2019-11-01","2019-11-01","2019-11-01","2019-11-01","2019-11-01","2019-11-02","2019-11-02","2019-11-02","2019-11-02","2019-11-02","2019-11-02")))
> df4 <- tibble(Fl=round(runif(12,0.1,5),2))
> df <- data.frame(df1,df2,df3,df4) #create the data.frame
> df_n <- df %>% group_by(P,C,SmpDate) %>% nest(data=c(SmpDate,Fl))
> 
> glimpse(df_n)
Observations: 6
Variables: 3
Groups: P, C [6]
$ P    <dbl> 101, 101, 102, 102, 103, 103
$ C    <dbl> 1, 2, 1, 2, 1, 2
$ data <list<df[,2]>> 18201.00, 18202.00, 0.50, 3.11, 18201.00, 18202.00, 2.04, 0.86, 18201.00, 18202.00, 2.07, 1.59, 18201.00, 18202.00, 4.51, 2.83, 18201.0...
> 

我想使用滞后函数和一些条件语句对Fl变量和数据列表中的SmpDate执行操作。我知道我应该能够使用purrr :: map函数,但是似乎无法正确地使用语法来解决各个元素。例如,请记住我意识到这是行不通的:

cp1<-function(df){
day(SmpDate)*Fl
}
cp2<-function(df){
  (SmpDate-lag(SmpDate,n=1L))*Fl
}

使用基于SmpDate的变异和条件,我将选择要应用的功能。

r purrr lag
1个回答
0
投票

这里是某事的尝试。但是您的帖子缺乏足够的背景信息,这种方法才有意义。


df_n %>% 
  mutate(
    cp1 = data %>% map(. %>% pmap(function(SmpDate, Fl, ...) {
      lubridate::day(SmpDate)*Fl
    })),

    cp2 = data %>% map(. %>% pmap(function(SmpDate, Fl, ...) {
      (SmpDate-lag(SmpDate,n=1L))*Fl
    }))
  ) %>% 
  # unnest(c(cp1, cp2))
  identity()
© www.soinside.com 2019 - 2024. All rights reserved.