5

動物園の列名について質問があります。私は通常、データ フレームから動物園オブジェクトを作成し、データ フレームから列を取得して動物園の列にします。私が見つけたのは、zoo オブジェクトに列を 1 つだけ指定すると、列名が動物園によって取得されないということです。動物園では「柱」とは見なされないということですか?

これは、1列と2列で、私が通常行う方法の例です。

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)

結果は次のようになります。

> colnames(zx)
NULL
> colnames(zy)
[1] "dbt" "rh" 

私は何かが恋しいですか?

4

2 に答える 2

7

[これは、配列またはデータ フレームで使用した場合の のデフォルトの動作です。空のディメンションは削除されます。検討

> 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は何も処理しません。

drop = FALSE解決策は、次のようにインデックスで使用することx[, 2, drop = FALSE]です

> 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

これがなぜ/どのように機能するかを確認するには、以下を参照してください。

> 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

また、インデックスでcolnamesデフォルト ( TRUE) が使用されている場合の欠如に注意してください。[

> colnames(x[, 2, drop = FALSE])
[1] "dbt"
> colnames(x[, 2, drop = TRUE])
NULL

詳細については、今すぐお読み?'['ください。

于 2013-07-02T15:21:30.937 に答える