我正在使用一个大数据库,我试图将一个平衡面板分块到多个平衡面板中,以便执行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
中的每个date
(Index
已经在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
我相信应该有一个简单的方法与function
和lapply
,但我不能来与这个解决方案。
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个连续的日期呢?
2条答案
按热度按时间tuwxkamq1#
你能做到
因此
B
是 Dataframe 的列表,每个帧具有9367行:每一个都包含大致相等数量的所有
clvs
:每个
datetime
包含17个示例:eyh26e7m2#
虽然这看起来是一个简单的任务,但将平衡面板数据分割成小的平衡面板是非常具有挑战性的。
@Allan卡梅隆的答案在列表长度上答对了,但在内容上没有答对,我的面板不平衡,每个
clvs
在同一个块里有188或187,而且datetime
不连续,B[["1"]]
有一个7:00
的序列,例如,13:00
和19:00
对应一个clvs
。对于不平衡的面板,我的splm
函数循环不起作用。解决方案使用
gl.unequal
:这样我就得到了平衡面板,例如
B[["1"]]