2013-07-02 27 views
5

Hayvanat bahçesindeki sütun adları hakkında bir sorum var. Genellikle bir veri çerçevesinden hayvanat bahçesi nesneleri oluşturuyorum ve ben sütun (lar) ı hayvanat bahçesi sütunları olacak şekilde veri çerçevesinden aldım. Ne bulduğum, eğer hayvanat bahçesi nesnesine sadece bir sütun belirtirseniz, o zaman sütun adı hayvanat bahçesine göre alınmayacaktır. Bu, hayvanat bahçesinde bir "sütun" sayılmadığı anlamına mı geliyor?zoo sütun adı

Örnek olarak, genellikle bir ve iki sütunla nasıl yaptığımı örnek olarak gösterelim.

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

şey özlüyor musun şu şekildedir:

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) 

sonuç gösteriyor?

cevap

4

; Boş boyutlar 'dan düştü. Vektör (bu durumda) 1-sütun veri çerçevesi ve bu nedenle R, bu bilgileri düşer ve sayısal olarak kolon içeriğini döndürür sütuna bilgi ihtiyacı yoktur, bu durumda,

> x[, 2] 
[1] 88.74 88.74 86.56 85.82 
> class(x[,2]) 
[1] "numeric" 
> is.data.frame(x[,2]) 
[1] FALSE 

düşünün Yukarıda görüldüğü gibi. Bu vektör bir colname özniteliğine sahip değildir ve bu nedenle zoo ile çalışmak için hiçbir şeye sahip değildir.

bir çözüm neden/nasıl çalıştığını,

> 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 

bakmak görmek için

> 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 

gibi endeksinde x[, 2, drop = FALSE] yılında drop = FALSE kullanmak Ve varsayılan (colnames eksikliğini dikkat etmektir TRUE) [ dizininde bulunmaktadır:

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

Daha fazla ayrıntı için ?'[' numaralı telefonu okuyun.

+0

Teşekkürler! Hiç bir fikrim yok, sütun bu kadar karmaşık olabilir. Eh, şimdi bu açıklama ile, basit görünüyor. – ery

5

Bu davranış, zoo nedeniyle değildir. x[,2], bir veri çerçevesini değil, bir vektörü döndürmez. Bu nedenle sütun yok ve sütun adı yok.

x[,2] 
[1] 88.74 88.74 86.56 85.82 

Eğer bir virgül veya x[,2, drop = FALSE] olmadan x[2] kullanabileceğiniz bir tek sütun veri çerçevesini dönmek isterseniz.

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 varsayılan değeri TRUE olduğunu. Bu, tek sütunlu bir veri çerçevesinin otomatik olarak bir vektöre dönüştürüldüğü anlamına gelir.

Şimdi çalışır: diziler veya veri çerçeveleri ile kullanıldığında bu [ varsayılan davranıştır

zx <- zoo(x[2], as.POSIXct(x$Index, tz="GMT")) 
colnames(zx) 
[1] "dbt" 
+0

Teşekkürler! x [2] büyük bir kısayol. – ery

+1

@ery sadece bir dikkatli olun çünkü bir matris/zoo nesnesi bir data.frame'den farklıdır. zy [2] ikinci satırı değil ikinci satırı seçer. – GSee

İlgili konular