【发布时间】:2020-10-09 17:52:43
【问题描述】:
我正在使用一个大数据库,我正在尝试将平衡面板分块到平衡面板中,以便我可以执行 plm 循环回归。
我一直在尝试划分我的数据框bb3(平衡分组),但我无法得到我想要的,这是我的驱动器中的示例数据bb3 .RData
第一次尝试
按照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 中的每个date(Index 已经在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,...) 将决定我如何划分我的数据框
我确信function 和lapply 应该有一个简单的方法,但我无法使用这个解决方案。
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 个clvsB[[i]]跨度> -
嗨,莉拉,我看到你没有接受我的回答。有问题吗?如果我能提供帮助,请告诉我。
-
感谢@AllanCameron 的提问,你能检查我在原帖中的编辑吗?我的数据框正在以无顺序的日期进行切割。每个列表每天有 3 个非连续小时。我想要第一个列表中的 102
clvs期间的前 92 小时(2017-02-28 1:00 到 2017-03-03 23:00),然后是第二个列表中的以下 92 小时并订购按时间顺序,有没有办法?