将数据框(面板数据)转换为动物园

问题描述 投票:0回答:2

如何将以下数据框(面板数据)转换为动物园?让 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(strptime(as.character(df[,2]), "%Y")))

我得到以下结果并带有警告:“如果‘order.by’中的索引条目不唯一,则“zoo”对象的某些方法不起作用”

    year     Ctry   Carx   Brx
 2000-06-02    A    23     12
 2000-06-02    B    NA     22
 2000-06-02    C    NA     NA
    ..        ..    ..     ..

上述数据框在 zoo 包中执行功能最合适的转换形式是什么?

非常感谢您的帮助...

r dataframe type-conversion zoo
2个回答
1
投票

zoo with split 我们不能拥有看起来像问题中样本输出的动物园对象;但是,如果我们将问题更改为需要宽形式的时间序列,我们可以将

read.zoo
split
参数一起使用:

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

给予:

> z
     Carx.A Brx.A Carx.B Brx.B Carx.C Brx.C
2000     23    12     NA    22     NA    NA
2001     18    16     NA    20     NA    25
2002     20    20     NA    14     24    32
2003     NA    18     NA    NA     21    NA
2004     24    NA     18    NA     NA    15
2005     18    12     16    14     24    NA

两个动物园对象 或者,考虑创建两个动物园对象:

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

注意:在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)

-2
投票

有谁知道如何做逆向过程?从具有多个变量的动物园时间序列 A_var1 A_var2 B_var1 B_var2 到面板数据帧?

© www.soinside.com 2019 - 2024. All rights reserved.