首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单列对象的zoo列名

单列对象的zoo列名
EN

Stack Overflow用户
提问于 2013-07-02 23:13:34
回答 2查看 6K关注 0票数 5

我有一个关于动物园中列名的问题。我通常从数据框中创建zoo对象,并从数据框中选取列作为zoo列。我发现,如果我只为zoo对象指定了一列,那么该列名将不会被zoo采用。这是否意味着它不被认为是动物园中的“列”?

这是一个我通常如何做的例子,有一列和两列。

代码语言:javascript
复制
Lines.1 = "Index,dbt
2008-08-20 15:03:18,88.74
2008-08-20 15:08:18,88.74
2008-08-20 15:13:18,86.56
2008-08-20 15:18:18,85.82"

Lines.2 = "Index,dbt,rh
2008-08-20 15:03:18,88.74,18.25
2008-08-20 15:08:18,88.74,17.25
2008-08-20 15:13:18,86.56,18.75
2008-08-20 15:18:18,85.82,19.75"

x =read.table(text = Lines.1, header = TRUE, sep = ",")
y =read.table(text = Lines.2, header = TRUE, sep = ",")

colnames(x)
colnames(y)

library(zoo)
zx = zoo(x[,2], as.POSIXct(x$Index, tz="GMT"))
zy = zoo(y[,2:3], as.POSIXct(y$Index, tz="GMT"))

colnames(zx)
colnames(zy)

结果表明:

代码语言:javascript
复制
> colnames(zx)
NULL
> colnames(zy)
[1] "dbt" "rh" 

我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-02 23:21:31

当与数组或数据帧一起使用时,这是[的默认行为;空维度将被丢弃。考虑一下

代码语言:javascript
复制
> x[, 2]
[1] 88.74 88.74 86.56 85.82
> class(x[,2])
[1] "numeric"
> is.data.frame(x[,2])
[1] FALSE

在这种情况下,1列数据帧不需要关于它是哪一列的信息,因此R丢弃了该信息,并以数字(在这种情况下)向量的形式返回该列的内容,如上所述。该向量没有colname属性,因此zoo没有什么可用的。

一种解决方案是在索引x[, 2, drop = FALSE]中使用drop = FALSE,如下所示

代码语言:javascript
复制
> zx <- zoo(x[, 2, drop = FALSE], as.POSIXct(x$Index, tz="GMT"))
> zx
                      dbt
2008-08-20 15:03:18 88.74
2008-08-20 15:08:18 88.74
2008-08-20 15:13:18 86.56
2008-08-20 15:18:18 85.82

要了解为什么/如何工作,请查看

代码语言:javascript
复制
> x[, 2, drop = FALSE]
    dbt
1 88.74
2 88.74
3 86.56
4 85.82
> is.data.frame(x[, 2, drop = FALSE])
[1] TRUE

请注意,当在[索引中使用默认值(TRUE)时,缺少colnames

代码语言:javascript
复制
> colnames(x[, 2, drop = FALSE])
[1] "dbt"
> colnames(x[, 2, drop = TRUE])
NULL

现在请阅读?'['以了解更多详细信息。

票数 7
EN

Stack Overflow用户

发布于 2013-07-02 23:20:27

此行为不是由zoo引起的。x[,2]返回的不是数据帧,而是向量。因此,没有列,也没有列名。

代码语言:javascript
复制
x[,2]
[1] 88.74 88.74 86.56 85.82

如果希望返回单列数据框,可以使用不带逗号或x[,2, drop = FALSE]x[2]

代码语言:javascript
复制
x[2]
    dbt
1 88.74
2 88.74
3 86.56
4 85.82

x[,2, drop = FALSE]
    dbt
1 88.74
2 88.74
3 86.56
4 85.82

drop的默认值为TRUE。这意味着单列数据框自动转换为向量。

现在,它起作用了:

代码语言:javascript
复制
zx <- zoo(x[2], as.POSIXct(x$Index, tz="GMT"))
colnames(zx)
[1] "dbt"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17429303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档