【问题标题】:How to split my data frame in equal length lists如何将我的数据框拆分为等长列表
【发布时间】:2020-10-09 17:52:43
【问题描述】:

我正在使用一个大数据库,我正在尝试将平衡面板分块到平衡面板中,以便我可以执行 plm 循环回归。

我一直在尝试划分我的数据框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 和一个date)。给定 Index 的 19 段,我想划分 bb3。这个列表 (1:19,20:39,40:59,...) 将决定我如何划分我的数据框

我确信functionlapply 应该有一个简单的方法,但我无法使用这个解决方案。

TL:DR 我想将我的数据框分成 19 个块,每个块有 102 个 clvs 每个块有 29 个句点 date:19 个块的列表,每个块有 2,958 个观察值

任何帮助将不胜感激

####编辑####

@Allan Cameron 我得到的解决方案将我的数据库切割成我需要的大小,但它不能用作平衡面板,因为它不会连续切割我的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 个连续日期?

【问题讨论】:

  • 如果您使用split 而不是split.default,您的split 是否有效?
  • 当我使用split 时,它不会给我Warning 消息,但每个列表只有17 个clvs,我需要每个列表中的102 个clvs B[[i]]跨度>
  • 嗨,莉拉,我看到你没有接受我的回答。有问题吗?如果我能提供帮助,请告诉我。
  • 感谢@AllanCameron 的提问,你能检查我在原帖中的编辑吗?我的数据框正在以无顺序的日期进行切割。每个列表每天有 3 个非连续小时。我想要第一个列表中的 102 clvs 期间的前 92 小时(2017-02-28 1:00 到 2017-03-03 23:00),然后是第二个列表中的以下 92 小时并订购按时间顺序,有没有办法?

标签: r dataframe split balance


【解决方案1】:

你可以的

B <- split(bb3, 1:6)

所以B 是一个数据帧列表,每个数据帧有 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 ]

【讨论】:

    【解决方案2】:

    虽然看起来很容易,但将平衡面板数据拆分成小的平衡面板非常具有挑战性。

    @Allan Cameron 的回答在列表的长度上是正确的,但不是在内容上。我的面板不平衡,每个clvs 在同一块中有 188 或 187 个,datetime 不是连续的。例如,B[["1"]] 有一系列 7:0013: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多