R语言 如何将数据框拆分为等长列表

disho6za  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(162)

我正在使用一个大数据库,我试图将一个平衡面板分块到多个平衡面板中,以便执行plm循环回归。
我一直试图划分我的 Dataframe bb3(平衡分组),但我无法管理得到我想要的,这是我的驱动器中的示例数据bb3作为.RData
bb3

首次尝试

question之后,我尝试使用split.default

n<-6
f<-gl(n,nrow(bb3) / n )
B<-split.default(bb3, f)

B接近我想要的,但是仅仅对于我的第一个列表B[["1"]],其他5个列表都是空的,我得到了下面的错误:

Warning message:
In split.default(bb3, f) : data length is not a multiple of split variable

TL:DR我想生成一个分成6个块的列表,每个块有102个clvs,其中date是连续的。即使它们不平衡,如果它们是连续的,我可以用make.pbalanced平衡它们。这将是我的理想解决方案
第二次尝试

我生成了Index,以标识每个clvs中的每个dateIndex已经在bb3中生成,但为了便于练习,我将解释我是如何生成的)

bb3<- bb3 %>% 
  group_by(clvs) %>% 
  mutate(Index = row_number())

问题是我不知道如何拆分:

si<-split.data.frame(bb3,bb3$Index)

同样,si与我需要的内容密切相关,它为我提供了一个包含551个平衡列表的列表(102个clvs和1个date)。我想将bb3划分为19个Index段。此列表(1:19,20:39,40:59,...)将决定我如何划分 Dataframe
我相信应该有一个简单的方法与functionlapply,但我不能来与这个解决方案。

TL:DR我想将我的 Dataframe 分成19个区块,每个区块有102个clvs,每个区块有29个周期date:19个区块的列表,每个区块有2,958个观测

我得到的解决方案由@Allan卡梅隆削减我的数据库的大小我需要它,但它不作为一个平衡面板,因为它不削减连续我的datetime

B <- split(bb3, 1:6)
head(B[["6"]])
clvs  fecha hora    pml pml_ene pml_per pml_cng datetime date               
  <fct> <chr> <chr> <dbl>   <dbl>   <dbl>   <dbl> <fct>    <dttm>             
1 07AC~ 2017~ 6      389.    388.    1.07       0 2017-02~ 2017-02-28 07:00:00
2 07AC~ 2017~ 12     677.    674.    3.25       0 2017-02~ 2017-02-28 13:00:00
3 07AC~ 2017~ 18     667.    664.    3.15       0 2017-02~ 2017-02-28 19:00:00
4 07AC~ 2017~ 24     666.    664.    2.44       0 2017-03~ 2017-03-01 01:00:00
5 07AC~ 2017~ 6      664.    662.    2.05       0 2017-03~ 2017-03-01 07:00:00
6 07AC~ 2017~ 12     434.    431.    2.97       0 2017-03~ 2017-03-01 13:00:00

tail(B[["6"]])

clvs  fecha hora    pml pml_ene pml_per pml_cng datetime date               
  <fct> <chr> <chr> <dbl>   <dbl>   <dbl>   <dbl> <fct>    <dttm>             
1 07XC~ 2017~ 18     430.    443.  -13.6        0 2017-03~ 2017-03-21 19:00:00
2 07XC~ 2017~ 24     418.    426.   -8.41       0 2017-03~ 2017-03-22 01:00:00
3 07XC~ 2017~ 6      442.    444.   -2.15       0 2017-03~ 2017-03-22 07:00:00
4 07XC~ 2017~ 12     451.    464.  -12.4        0 2017-03~ 2017-03-22 13:00:00
5 07XC~ 2017~ 18     450.    461.  -11.2        0 2017-03~ 2017-03-22 19:00:00
6 07XC~ 2017~ 24     452.    467.  -15          0 2017-03~ 2017-03-23 01:00:00

所以我仍然无法平衡我的面板,也无法将其与plm配合使用
我怎么能把它分成6个连续的日期呢?

tuwxkamq

tuwxkamq1#

你能做到

B <- split(bb3, 1:6)

因此B是 Dataframe 的列表,每个帧具有9367行:

sapply(B, nrow)
#>    0    1    2    3    4    5 
#> 9367 9367 9367 9367 9367 9367

每一个都包含大致相等数量的所有clvs

sapply(B, function(x) table(x$clvs))
#>            1  2  3  4  5  6
#> 07ACU-115 92 92 92 92 92 91
#> 07APD-230 92 92 92 92 91 92
#> 07BJO-69  92 92 92 91 92 92
#> 07CAE-69  92 92 91 92 92 92
#> 07CES-69  92 91 92 92 92 92
#> 07CHQ-230 91 92 92 92 92 92
#> 07CIP-115 92 92 92 92 92 91
#> 07CME-115 92 92 92 92 91 92
#> 07CNA-69  92 92 92 91 92 92
#> 07CNT-230 92 92 91 92 92 92
#> 07CNZ-161 92 91 92 92 92 92
#> 07COE-115 91 92 92 92 92 92
#> 07CPC-161 92 92 92 92 92 91
#> 07CPD-230 92 92 92 92 91 92
#> 07CPT-230 92 92 92 91 92 92
#> 07CPU-161 92 92 91 92 92 92
#> 07CRO-161 92 91 92 92 92 92
#> 07CSC-230 91 92 92 92 92 92
#> 07CTY-161 92 92 92 92 92 91
#> 07CTY-230 92 92 92 92 91 92
#> 07DRA-69  92 92 92 91 92 92
#> 07EDA-115 92 92 91 92 92 92
#> 07END-69  92 91 92 92 92 92
#> 07ENT-115 91 92 92 92 92 92
#> 07EPC-115 92 92 92 92 92 91
#> 07FCO-69  92 92 92 92 91 92
#> 07FEV-161 92 92 92 91 92 92
#> 07FLO-69  92 92 91 92 92 92
#> 07FMO-115 92 91 92 92 92 92
#> 07FOR-69  91 92 92 92 92 92
#> 07FTA-69  92 92 92 92 92 91
#> 07GER-69  92 92 92 92 91 92
#> 07GLL-115 92 92 92 91 92 92
#> 07GOR-161 92 92 91 92 92 92
#> 07HGO-161 92 91 92 92 92 92
#> 07HMO-69  91 92 92 92 92 92
#> 07HUN-69  92 92 92 92 92 91
#> 07INA-69  92 92 92 92 91 92
#> 07IOP-69  92 92 92 91 92 92
#> 07JAT-115 92 92 91 92 92 92
#> 07JOV-230 92 91 92 92 92 92
#> 07JOY-115 91 92 92 92 92 92
#> 07KCH-161 92 92 92 92 92 91
#> 07LGO-69  92 92 92 92 91 92
#> 07LMS-69  92 92 92 91 92 92
#> 07LOS-115 92 92 91 92 92 92
#> 07MAB-69  92 91 92 92 92 92
#> 07MEP-230 91 92 92 92 92 92
#> 07MEP-69  92 92 92 92 92 91
#> 07MND-115 92 92 92 92 91 92
#> 07MOE-161 92 92 92 91 92 92
#> 07MSN-115 92 92 91 92 92 92
#> 07MXC-69  92 91 92 92 92 92
#> 07MXI-161 91 92 92 92 92 92
#> 07MXI-230 92 92 92 92 92 91
#> 07NEL-69  92 92 92 92 91 92
#> 07NZI-161 92 92 92 91 92 92
#> 07ONG-69  92 92 91 92 92 92
#> 07OZA-230 92 91 92 92 92 92
#> 07PAF-69  91 92 92 92 92 92
#> 07PAP-69  92 92 92 92 92 91
#> 07PID-161 92 92 92 92 91 92
#> 07PID-230 92 92 92 91 92 92
#> 07PJZ-115 92 92 91 92 92 92
#> 07PJZ-230 92 91 92 92 92 92
#> 07PKD-161 91 92 92 92 92 92
#> 07PNM-115 92 92 92 92 92 91
#> 07PNU-115 92 92 92 92 91 92
#> 07POP-115 92 92 92 91 92 92
#> 07RII-69  92 92 91 92 92 92
#> 07RIN-161 92 91 92 92 92 92
#> 07RSI-69  91 92 92 92 92 92
#> 07RUB-69  92 92 92 92 92 91
#> 07RUM-69  92 92 92 92 91 92
#> 07RZC-161 92 92 92 91 92 92
#> 07SAF-115 92 92 91 92 92 92
#> 07SAZ-115 92 91 92 92 92 92
#> 07SED-69  91 92 92 92 92 92
#> 07SHA-115 92 92 92 92 92 91
#> 07SIO-69  92 92 92 92 91 92
#> 07SIS-161 92 92 92 91 92 92
#> 07SMN-115 92 92 91 92 92 92
#> 07SQN-115 92 91 92 92 92 92
#> 07SRY-230 91 92 92 92 92 92
#> 07STB-230 92 92 92 92 92 91
#> 07SVE-115 92 92 92 92 91 92
#> 07TCD-69  92 92 92 91 92 92
#> 07TCT-69  92 92 91 92 92 92
#> 07TEE-69  92 91 92 92 92 92
#> 07TEK-230 91 92 92 92 92 92
#> 07TJD-69  92 92 92 92 92 91
#> 07TJI-69  92 92 92 92 91 92
#> 07TOY-230 92 92 92 91 92 92
#> 07TRI-115 92 92 91 92 92 92
#> 07UND-69  92 91 92 92 92 92
#> 07VAS-69  91 92 92 92 92 92
#> 07VIG-69  92 92 92 92 92 91
#> 07VLP-69  92 92 92 92 91 92
#> 07VPA-230 92 92 92 91 92 92
#> 07VPM-69  92 92 91 92 92 92
#> 07WIS-230 92 91 92 92 92 92
#> 07XCO-230 91 92 92 92 92 92

每个datetime包含17个示例:

sapply(B, function(x) table(as.character(x$datetime)))
#>                      1  2  3  4  5  6
#> 2017-02-28 01:00:00 17 17 17 17 17 17
#> 2017-02-28 02:00:00 17 17 17 17 17 17
#> 2017-02-28 03:00:00 17 17 17 17 17 17
#> 2017-02-28 04:00:00 17 17 17 17 17 17
#> 2017-02-28 05:00:00 17 17 17 17 17 17
#> 2017-02-28 06:00:00 17 17 17 17 17 17
#> 2017-02-28 07:00:00 17 17 17 17 17 17
#> 2017-02-28 08:00:00 17 17 17 17 17 17
#> 2017-02-28 09:00:00 17 17 17 17 17 17
#> 2017-02-28 10:00:00 17 17 17 17 17 17
#> 2017-02-28 11:00:00 17 17 17 17 17 17
#> 2017-02-28 12:00:00 17 17 17 17 17 17
#> 2017-02-28 13:00:00 17 17 17 17 17 17
#> 2017-02-28 14:00:00 17 17 17 17 17 17
#> 2017-02-28 15:00:00 17 17 17 17 17 17
#> 2017-02-28 16:00:00 17 17 17 17 17 17
#> 2017-02-28 17:00:00 17 17 17 17 17 17
#> 2017-02-28 18:00:00 17 17 17 17 17 17
#> 2017-02-28 19:00:00 17 17 17 17 17 17
#> 2017-02-28 20:00:00 17 17 17 17 17 17
#> 2017-02-28 21:00:00 17 17 17 17 17 17
#> 2017-02-28 22:00:00 17 17 17 17 17 17
#> 2017-02-28 23:00:00 17 17 17 17 17 17
#> 2017-03-01 00:00:00 17 17 17 17 17 17
#> 2017-03-01 01:00:00 17 17 17 17 17 17
#> 2017-03-01 02:00:00 17 17 17 17 17 17
#> 2017-03-01 03:00:00 17 17 17 17 17 17
#> 2017-03-01 04:00:00 17 17 17 17 17 17
#> 2017-03-01 05:00:00 17 17 17 17 17 17
#> 2017-03-01 06:00:00 17 17 17 17 17 17
#> 2017-03-01 07:00:00 17 17 17 17 17 17
#> 2017-03-01 08:00:00 17 17 17 17 17 17
#> 2017-03-01 09:00:00 17 17 17 17 17 17
#> 2017-03-01 10:00:00 17 17 17 17 17 17
#> 2017-03-01 11:00:00 17 17 17 17 17 17
#> 2017-03-01 12:00:00 17 17 17 17 17 17
#> 2017-03-01 13:00:00 17 17 17 17 17 17
#> 2017-03-01 14:00:00 17 17 17 17 17 17
#> 2017-03-01 15:00:00 17 17 17 17 17 17
#> 2017-03-01 16:00:00 17 17 17 17 17 17
#> 2017-03-01 17:00:00 17 17 17 17 17 17
#> 2017-03-01 18:00:00 17 17 17 17 17 17
#> 2017-03-01 19:00:00 17 17 17 17 17 17
#> 2017-03-01 20:00:00 17 17 17 17 17 17
#> 2017-03-01 21:00:00 17 17 17 17 17 17
#> 2017-03-01 22:00:00 17 17 17 17 17 17
#> 2017-03-01 23:00:00 17 17 17 17 17 17
#> 2017-03-02 00:00:00 17 17 17 17 17 17
#> 2017-03-02 01:00:00 17 17 17 17 17 17
#> 2017-03-02 02:00:00 17 17 17 17 17 17
#> 2017-03-02 03:00:00 17 17 17 17 17 17
#> 2017-03-02 04:00:00 17 17 17 17 17 17
#> 2017-03-02 05:00:00 17 17 17 17 17 17
#> 2017-03-02 06:00:00 17 17 17 17 17 17
#> 2017-03-02 07:00:00 17 17 17 17 17 17
#> 2017-03-02 08:00:00 17 17 17 17 17 17
#> 2017-03-02 09:00:00 17 17 17 17 17 17
#> 2017-03-02 10:00:00 17 17 17 17 17 17
#> 2017-03-02 11:00:00 17 17 17 17 17 17
#> 2017-03-02 12:00:00 17 17 17 17 17 17
#> 2017-03-02 13:00:00 17 17 17 17 17 17
#> 2017-03-02 14:00:00 17 17 17 17 17 17
#> 2017-03-02 15:00:00 17 17 17 17 17 17
#> 2017-03-02 16:00:00 17 17 17 17 17 17
#> 2017-03-02 17:00:00 17 17 17 17 17 17
#> 2017-03-02 18:00:00 17 17 17 17 17 17
#> 2017-03-02 19:00:00 17 17 17 17 17 17
#> 2017-03-02 20:00:00 17 17 17 17 17 17
#> 2017-03-02 21:00:00 17 17 17 17 17 17
#> 2017-03-02 22:00:00 17 17 17 17 17 17
#> 2017-03-02 23:00:00 17 17 17 17 17 17
#> 2017-03-03 00:00:00 17 17 17 17 17 17
#> 2017-03-03 01:00:00 17 17 17 17 17 17
#> 2017-03-03 02:00:00 17 17 17 17 17 17
#> 2017-03-03 03:00:00 17 17 17 17 17 17
#> 2017-03-03 04:00:00 17 17 17 17 17 17
#> 2017-03-03 05:00:00 17 17 17 17 17 17
#> 2017-03-03 06:00:00 17 17 17 17 17 17
#> 2017-03-03 07:00:00 17 17 17 17 17 17
#> 2017-03-03 08:00:00 17 17 17 17 17 17
#> 2017-03-03 09:00:00 17 17 17 17 17 17
#> 2017-03-03 10:00:00 17 17 17 17 17 17
#> 2017-03-03 11:00:00 17 17 17 17 17 17
#> 2017-03-03 12:00:00 17 17 17 17 17 17
#> 2017-03-03 13:00:00 17 17 17 17 17 17
#> 2017-03-03 14:00:00 17 17 17 17 17 17
#> 2017-03-03 15:00:00 17 17 17 17 17 17
#> 2017-03-03 16:00:00 17 17 17 17 17 17
#> 2017-03-03 17:00:00 17 17 17 17 17 17
#> 2017-03-03 18:00:00 17 17 17 17 17 17
#> 2017-03-03 19:00:00 17 17 17 17 17 17
#> 2017-03-03 20:00:00 17 17 17 17 17 17
#> 2017-03-03 21:00:00 17 17 17 17 17 17
#> 2017-03-03 22:00:00 17 17 17 17 17 17
#> 2017-03-03 23:00:00 17 17 17 17 17 17
#> 2017-03-04 00:00:00 17 17 17 17 17 17
#> 2017-03-04 01:00:00 17 17 17 17 17 17
#> 2017-03-04 02:00:00 17 17 17 17 17 17
#> 2017-03-04 03:00:00 17 17 17 17 17 17
#> 2017-03-04 04:00:00 17 17 17 17 17 17
#> 2017-03-04 05:00:00 17 17 17 17 17 17
#> 2017-03-04 06:00:00 17 17 17 17 17 17
#> 2017-03-04 07:00:00 17 17 17 17 17 17
#> 2017-03-04 08:00:00 17 17 17 17 17 17
#> 2017-03-04 09:00:00 17 17 17 17 17 17
#> 2017-03-04 10:00:00 17 17 17 17 17 17
#> 2017-03-04 11:00:00 17 17 17 17 17 17
#> 2017-03-04 12:00:00 17 17 17 17 17 17
#> 2017-03-04 13:00:00 17 17 17 17 17 17
#> 2017-03-04 14:00:00 17 17 17 17 17 17
#> 2017-03-04 15:00:00 17 17 17 17 17 17
#> 2017-03-04 16:00:00 17 17 17 17 17 17
#> 2017-03-04 17:00:00 17 17 17 17 17 17
#> 2017-03-04 18:00:00 17 17 17 17 17 17
#> 2017-03-04 19:00:00 17 17 17 17 17 17
#> 2017-03-04 20:00:00 17 17 17 17 17 17
#> 2017-03-04 21:00:00 17 17 17 17 17 17
#> 2017-03-04 22:00:00 17 17 17 17 17 17
#> 2017-03-04 23:00:00 17 17 17 17 17 17
#> 2017-03-05 00:00:00 17 17 17 17 17 17
#> 2017-03-05 01:00:00 17 17 17 17 17 17
#> 2017-03-05 02:00:00 17 17 17 17 17 17
#> 2017-03-05 03:00:00 17 17 17 17 17 17
#> 2017-03-05 04:00:00 17 17 17 17 17 17
#> 2017-03-05 05:00:00 17 17 17 17 17 17
#> 2017-03-05 06:00:00 17 17 17 17 17 17
#> 2017-03-05 07:00:00 17 17 17 17 17 17
#> 2017-03-05 08:00:00 17 17 17 17 17 17
#> 2017-03-05 09:00:00 17 17 17 17 17 17
#> 2017-03-05 10:00:00 17 17 17 17 17 17
#> 2017-03-05 11:00:00 17 17 17 17 17 17
#> 2017-03-05 12:00:00 17 17 17 17 17 17
#> 2017-03-05 13:00:00 17 17 17 17 17 17
#> 2017-03-05 14:00:00 17 17 17 17 17 17
#> 2017-03-05 15:00:00 17 17 17 17 17 17
#> 2017-03-05 16:00:00 17 17 17 17 17 17
#> 2017-03-05 17:00:00 17 17 17 17 17 17
#> 2017-03-05 18:00:00 17 17 17 17 17 17
#> 2017-03-05 19:00:00 17 17 17 17 17 17
#> 2017-03-05 20:00:00 17 17 17 17 17 17
#> 2017-03-05 21:00:00 17 17 17 17 17 17
#> 2017-03-05 22:00:00 17 17 17 17 17 17
#> 2017-03-05 23:00:00 17 17 17 17 17 17
#> 2017-03-06 00:00:00 17 17 17 17 17 17
#> 2017-03-06 01:00:00 17 17 17 17 17 17
#> 2017-03-06 02:00:00 17 17 17 17 17 17
#> 2017-03-06 03:00:00 17 17 17 17 17 17
#> 2017-03-06 04:00:00 17 17 17 17 17 17
#> 2017-03-06 05:00:00 17 17 17 17 17 17
#> 2017-03-06 06:00:00 17 17 17 17 17 17
#> 2017-03-06 07:00:00 17 17 17 17 17 17
#> 2017-03-06 08:00:00 17 17 17 17 17 17
#> 2017-03-06 09:00:00 17 17 17 17 17 17
#> 2017-03-06 10:00:00 17 17 17 17 17 17
#> 2017-03-06 11:00:00 17 17 17 17 17 17
#> 2017-03-06 12:00:00 17 17 17 17 17 17
#> 2017-03-06 13:00:00 17 17 17 17 17 17
#> 2017-03-06 14:00:00 17 17 17 17 17 17
#> 2017-03-06 15:00:00 17 17 17 17 17 17
#> 2017-03-06 16:00:00 17 17 17 17 17 17
#> 2017-03-06 17:00:00 17 17 17 17 17 17
#> 2017-03-06 18:00:00 17 17 17 17 17 17
#> 2017-03-06 19:00:00 17 17 17 17 17 17
#> 2017-03-06 20:00:00 17 17 17 17 17 17
#> 2017-03-06 21:00:00 17 17 17 17 17 17
#> 2017-03-06 22:00:00 17 17 17 17 17 17
#>  [ reached getOption("max.print") -- omitted 385 rows ]
eyh26e7m

eyh26e7m2#

虽然这看起来是一个简单的任务,但将平衡面板数据分割成小的平衡面板是非常具有挑战性的。
@Allan卡梅隆的答案在列表长度上答对了,但在内容上没有答对,我的面板不平衡,每个clvs在同一个块里有188或187,而且datetime不连续,B[["1"]]有一个7:00的序列,例如,13:0019:00对应一个clvs。对于不平衡的面板,我的splm函数循环不起作用。
解决方案使用gl.unequal

library(DTK)
f<-gl.unequal(n=6,k=c(92,92,92,92,92,91))
B<-split(bb3,f)

这样我就得到了平衡面板,例如B[["1"]]

head(B3[["1"]])
1 07AC~ 2017~ 1      686.    684.    2.19       0 2017-02~ 2017-02-28 02:00:00
2 07AC~ 2017~ 2      665.    664.    1.79       0 2017-02~ 2017-02-28 03:00:00
3 07AC~ 2017~ 3      393.    392.    1.11       0 2017-02~ 2017-02-28 04:00:00
4 07AC~ 2017~ 4      383.    381.    1.4        0 2017-02~ 2017-02-28 05:00:00
5 07AC~ 2017~ 5      383.    381.    1.41       0 2017-02~ 2017-02-28 06:00:00
6 07AC~ 2017~ 6      389.    388.    1.07       0 2017-02~ 2017-02-28 07:00:00

is.pbalanced(B[["1"]])
TRUE

相关问题