【问题标题】:sub setting unbalanced panel data by date range按日期范围设置不平衡面板数据
【发布时间】:2019-03-03 10:50:48
【问题描述】:

我有一个像这样的不平衡面板数据集。

date          firms     return
2003-03-01      A       2
2003-04-01      A       5
2003-05-01      A       1
2003-06-01      A       4
2003-07-01      A       4
2003-08-01      A       3
2003-09-01      A       2
2003-10-01      A       5
2003-11-01      A       3
2003-12-01      A       2
2004-01-01      A       8
2004-02-01      A       4
2004-03-01      A       3
2004-04-01      A       5
2004-05-01      A       3
2004-06-01      A       2
2004-07-01      A       2
2004-08-01      A       5
2004-09-01      A       1
2004-10-01      A       4
2004-11-01      A       4
2004-12-01      A       3
2003-03-01      B       3
2003-04-01      B       5
2003-05-01      B       3
2003-06-01      B       2
2003-07-01      B       2
2003-08-01      B       5
2003-09-01      B       3
2003-10-01      B       2
2003-11-01      B       8
2003-12-01      B       4
2004-01-01      B       3
2004-02-01      B       3
2004-03-01      B       5
2004-04-01      B       3
2004-05-01      B       2
2004-06-01      B       2
2004-07-01      B       5
2004-08-01      B       1
2004-09-01      B       4
2004-10-01      B       4
2004-11-01      B       3
2004-12-01      B       3
2005-01-01      B       3
2005-02-01      B       3
2005-03-01      B       5
2005-04-01      B       3
2005-05-01      B       2
2005-06-01      B       2
2005-07-01      B       5
2005-08-01      B       3
2005-09-01      B       2
2005-10-01      B       8
2005-11-01      B       4
2005-12-01      B       4

数据是月度不平衡面板,其中所有公司的观察日期数量不同。我想按日期将这个集合分成两部分。我尝试使用此代码,但它不起作用

requre(data.table)
df1<-testset[date %between% c("2003-01-01", "2004-06-01")]
df2<-testset[date %between% c("2004-07-01", "2006-06-01")]

您能否给我一些更好的代码,我可以根据我喜欢的任何日期范围对其进行子集化?

【问题讨论】:

  • date 属于 Date 类吗?此外,c("2003-01-01", "2004-06-01")characters,它们应该是 Date。与库lubridate:c(ymd("2003-01-01"), ymd("2004-06-01")) 最佳!
  • 嗨,用dput(testset) 提供你的数据会更明智,否则我们对结构一无所知,你知道吗?请从猜谜游戏中拯救社区。​​span>
  • 运行 dput 会产生类似 17683、17713、8035、8066 @jay.sf 的数字

标签: r date


【解决方案1】:

假设您的数据具有这种结构。

> str(testset)
'data.frame':   56 obs. of  3 variables:
 $ date  : Factor w/ 34 levels "2003-03-01","2003-04-01",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ firms : Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...
 $ return: int  2 5 1 4 4 3 2 5 3 2 ...

您可以将日期转换为 POSIXct 格式以运行您的代码。

testset$date <- as.POSIXct(testset$date)

library(data.table)
df1 <- testset[testset$date %between% c("2003-01-01", "2004-06-01"), ]
df2 <- testset[testset$date %between% c("2004-07-01", "2006-06-01"), ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2021-07-14
    • 1970-01-01
    • 2018-08-06
    • 2014-10-30
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多