我正在尝试从 Stata 学习 R,但遇到了以下两个问题,我似乎无法在 R 中找到优雅的解决方案:
1)我有一个面板数据集,时间变量中有间隙。尽管没有观察到这些行的数据,但我想扩展我的时间变量以包含间隙。
在 Stata 中,我通常会通过使用
xtset
设置 ID 和时间变量,然后使用 tsfill
扩展基于此的数据集。 R 中是否有同样优雅的方式?
2)我想用常量变量的数据填充一些新的空白单元格。
在 Stata 中,我将通过使用
l.
前缀复制之前(相对于我的时间变量)观测值的数据来做到这一点;例如使用 replace Con = l.Con
.
换句话说,我问如何摆脱这样的事情:
ID Time Num Con
1 Jan 10 A
1 Feb 15 A
1 May 20 A
2 Feb 12 B
2 Mar 14 B
2 Jun 15 B
对于这样的事情:
ID Time Num Con
1 Jan 10 A
1 Feb 15 A
1 Mar A
1 Apr A
1 May 20 A
2 Feb 12 B
2 Mar 14 B
2 Apr B
2 May B
2 Jun 15 B
希望这是有道理的。预先感谢。
您可以尝试
merge
中的 base R
或 data.table
加入
library(data.table)
DT2 <- setDT(df1)[, {tmp <- match(Time, month.abb)
list(Time=month.abb[min(tmp):max(tmp)])}, .(ID,Con)]
setkey(df1[, c(1,4,2,3), with=FALSE], ID, Con, Time)[DT2]
# ID Con Time Num
# 1: 1 A Jan 10
# 2: 1 A Feb 15
# 3: 1 A Mar NA
# 4: 1 A Apr NA
# 5: 1 A May 20
# 6: 2 B Feb 12
# 7: 2 B Mar 14
# 8: 2 B Apr NA
# 9: 2 B May NA
#10: 2 B Jun 15
注意:保留缺失值可能会更好,因为
NA
您可以使用R中的fill()函数或complete()函数来填补面板数据中缺失的空白。 fill() 函数要求您首先转换 tsibble 中的数据,然后填充这些缺失的间隙。另一方面,完整功能是 tidyverse 软件包的一部分,可以直接填补面板数据中缺失的空白。 要了解更多信息https://thedatahall.com/filling-gaps-in-time-series-and-panel-data-using-r/