R 将数据帧(面板数据)转换为zoo

R 将数据帧(面板数据)转换为zoo,r,dataframe,type-conversion,zoo,R,Dataframe,Type Conversion,Zoo,如何将以下数据框(面板数据)转换为zoo?让df表示我的数据帧 Ctry year Carx Brx A 2000 23 12 A 2001 18 16 A 2002 20 20 A 2003 NA 18 A 2004 24 NA A 2005 18 12 B 2000 NA 22 B 2001 NA 20 B

如何将以下数据框(面板数据)转换为zoo?让df表示我的数据帧

Ctry  year   Carx   Brx
 A    2000    23     12
 A    2001    18     16
 A    2002    20     20
 A    2003    NA     18
 A    2004    24     NA
 A    2005    18     12
 B    2000    NA     22
 B    2001    NA     20
 B    2002    NA     14
 B    2003    NA     NA
 B    2004    18     NA
 B    2005    16     14   
 C    2000    NA     NA
 C    2001    NA     25
 C    2002    24     32
 C    2003    21     NA
 C    2004    NA     15
 C    2005    24     NA
我尝试了以下代码

df.zoo=zoo(df[,-2],order.by=as.Date(strtime(as.character(df[,2]),%Y))

我得到了以下结果,但有一个警告:“如果'order.by'中的索引项不唯一,则“zoo”对象的某些方法不起作用”

为执行zoo软件包中的功能,上述数据帧最合适的转换形式是什么


非常感谢你的帮助

带有拆分的zoo我们不能有与问题中的示例输出类似的zoo对象;但是,如果我们将问题更改为需要广泛形式的时间序列,我们可以使用
read.zoo
split
参数:

z <- read.zoo(DF, split = "Ctry", index = "year", FUN = identity)

<强>两个动物园对象< /强>交替地,考虑创建两个动物园对象:

Carx.z <- read.zoo(DF[, -3], split = "Ctry", index = "year", FUN = identity)
Brx.z <- read.zoo(DF[, -4], split = "Ctry", index = "year", FUN = identity)
注意:在zoo
read的开发版本中,zoo
能够自动计算出
FUN=identity
部分,因此可以删除该参数

可再现的试验数据。我们在上面使用了以下数据框
DF

Lines <- "Ctry  year   Carx   Brx
 A    2000    23     12
 A    2001    18     16
 A    2002    20     20
 A    2003    NA     18
 A    2004    24     NA
 A    2005    18     12
 B    2000    NA     22
 B    2001    NA     20
 B    2002    NA     14
 B    2003    NA     NA
 B    2004    18     NA
 B    2005    16     14   
 C    2000    NA     NA
 C    2001    NA     25
 C    2002    24     32
 C    2003    21     NA
 C    2004    NA     15
 C    2005    24     NA
"
DF <- read.table(text = Lines, header = TRUE)
Carx.z <- read.zoo(DF[, -3], split = "Ctry", index = "year", FUN = identity)
Brx.z <- read.zoo(DF[, -4], split = "Ctry", index = "year", FUN = identity)
> Carx.z
      A  B  C
2000 12 22 NA
2001 16 20 25
2002 20 14 32
2003 18 NA NA
2004 NA NA 15
2005 12 14 NA
> Brx.z
      A  B  C
2000 23 NA NA
2001 18 NA NA
2002 20 NA 24
2003 NA NA 21
2004 24 18 NA
2005 18 16 24
Lines <- "Ctry  year   Carx   Brx
 A    2000    23     12
 A    2001    18     16
 A    2002    20     20
 A    2003    NA     18
 A    2004    24     NA
 A    2005    18     12
 B    2000    NA     22
 B    2001    NA     20
 B    2002    NA     14
 B    2003    NA     NA
 B    2004    18     NA
 B    2005    16     14   
 C    2000    NA     NA
 C    2001    NA     25
 C    2002    24     32
 C    2003    21     NA
 C    2004    NA     15
 C    2005    24     NA
"
DF <- read.table(text = Lines, header = TRUE)