【问题标题】:make time series data frame in R ask 3(tidyr)在R中制作时间序列数据框问3(tidyr)
【发布时间】:2020-04-06 06:45:30
【问题描述】:

https://dplyr.tidyverse.org/reference/lead-lag.html

我想要滞后列。 就像上面的网址。 但是我有很多功能。

data <- data.frame(day=c("2010-01-01","2010-01-02","2010-01-03","2010-01-04","2010-01-05"),
           dummy_1=rbinom(5,1,0.5),
           dummy_2=rbinom(5,1,0.5),
           dummy_3=rbinom(5,1,0.5),
           #and so on ...... many dummy_X colmuns...
           one_hot_1=rbinom(5,1,0.5),
           one_hot_2=rbinom(5,1,0.5),
           one_hot_3=rbinom(5,1,0.5)
           #and so on ...... many one_hot_X colmuns...
           )


         day dummy_1 dummy_2 dummy_3 one_hot_1 one_hot_2 one_hot_3
1 2010-01-01       1       1       1         0         1         1
2 2010-01-02       0       1       1         0         0         0
3 2010-01-03       1       0       1         0         0         0
4 2010-01-04       0       0       1         1         1         1
5 2010-01-05       0       1       0         0         0         1


我想获得更容易(整洁)和稳定的列名。


data_2 <- mutate(data, 
                 dummy_1_shift_2 = lag(dummy_1, 2),
                 dummy_1_shift_3 = lag(dummy_1, 3),
                 dummy_1_shift_4 = lag(dummy_1, 4),
                 dummy_1_shift_5 = lag(dummy_1, 5),
                 dummy_1_shift_6 = lag(dummy_1, 6),
                 dummy_1_shift_7 = lag(dummy_1, 7),
                 dummy_1_shift_8 = lag(dummy_1, 8),
                 #and so on ...... many dummy_X_shift_Y colmuns...
                 one_hot_shift_2 = lag(one_hot_1, 2),
                 one_hot_shift_3 = lag(one_hot_1, 3),
                 one_hot_shift_4 = lag(one_hot_1, 4),
                 one_hot_shift_5 = lag(one_hot_1, 5),
                 one_hot_shift_6 = lag(one_hot_1, 6),
                 one_hot_shift_7 = lag(one_hot_1, 7),
                 one_hot_shift_8 = lag(one_hot_1, 8)
                 )

你有什么想法吗?在R中。

谢谢。

【问题讨论】:

  • 您想对所有虚拟列 + 所有 one_hot_columns 执行此操作吗?那么每列都有 8 个新列?
  • 是的。如上述data_1的列名c(day,dummy_1~3,one_hot_1~3)。我想做 (dummy_1_shift_2~8,summy_2_shift_2~8,dummy_3_shift_2~8,one_hot_1_shift_2~8 和每个 for one_hot_2,3 )

标签: r dplyr tidyverse tidyr one-hot-encoding


【解决方案1】:

我们可以使用:

cbind(data, do.call(cbind, lapply(names(data)[-1], function(x) 
    setNames(do.call(cbind.data.frame, lapply(1:8, function(y) 
       dplyr::lag(data[[x]], y))), paste0(x, "_shift_", 1:8)))))

【讨论】:

  • 打电话。我从来不知道。为什么知道这么多功能??因为图书馆开发商??卡格勒??
  • 不,只是碰巧经常使用 R。
【解决方案2】:

我们可以使用map_dfc遍历数据名称,然后使用transmute_at应用lag,然后使用bind_cols绑定回原始数据

library(dplyr)
bind_cols(data, 
       purrr:map_dfc(names(data)[-1][1:2], function(y) data %>% 
                    transmute_at(vars(y), list(shift_2=~lag(.,2),
                                               shift_3=~lag(.,3),
                                               shift_4=~lag(.,4))) %>% 
                    rename_all(~paste0(y,"_",.))))

         day dummy_1 dummy_2 dummy_3 one_hot_1 one_hot_2 one_hot_3 dummy_1_shift_2 dummy_1_shift_3 dummy_1_shift_4 dummy_2_shift_2 dummy_2_shift_3 dummy_2_shift_4
1 2010-01-01       0       1       0         0         0         1              NA              NA              NA              NA              NA              NA
2 2010-01-02       1       1       0         0         0         0              NA              NA              NA              NA              NA              NA
3 2010-01-03       0       0       0         0         1         1               0              NA              NA               1              NA              NA
4 2010-01-04       1       1       1         1         0         1               1               0              NA               1               1              NA
5 2010-01-05       1       1       0         1         1         1               0               1               0               0               1               1

【讨论】:

  • 可爱的猫库咕噜咕噜。我知道那个图书馆的名字,但我从来没有用过。对于初学者来说,它有很多困难的功能。谢谢
猜你喜欢
  • 2020-07-11
  • 2020-07-18
  • 2018-12-07
  • 2021-03-18
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多