2013-05-19 21 views
9

Böyle bir durumunuz vardı. Data.frame'den data.table'a "mtcars" sınıfını çevirmeye çalıştı.veri dosyasını data.table sütununa dönüştür

"mtcars" veriler:

> mtcars 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710   22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 

Orijinal sınıf "data.frame" dir.

> str(mtcars) 
'data.frame': 32 obs. of 11 variables: 
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ... 
$ disp: num 160 160 108 258 360 ... 
$ hp : num 110 110 93 110 175 105 245 62 95 123 ... 
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... 
$ wt : num 2.62 2.88 2.32 3.21 3.44 ... 
$ qsec: num 16.5 17 18.6 19.4 17 ... 
$ vs : num 0 0 1 1 0 1 0 1 1 1 ... 
$ am : num 1 1 1 0 0 0 0 0 0 0 ... 
$ gear: num 4 4 4 3 3 3 3 4 4 4 ... 
$ carb: num 4 4 1 1 2 1 4 2 2 4 ... 

Data.table dosyasına dönüştürün. Araba markaları için Sütunlar gitti gitti. Niye ya? Markalar sütunu nasıl korunur? markaların ilk sütun için YENİ bir sütun adı "Markaları" sahip -

> mtcars2 <- data.table(mtcars) 
> mtcars2 
    mpg cyl disp hp drat wt qsec vs am gear carb 
1: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
2: 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
3: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 

aşağıda nihai veri formatı ile bir data.table sahip olmak ister misiniz. Orijinal "mtcars" veri kümesinden "Markalar" sütununu eklemek nasıl kodlanır?

Brands    mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710   22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 

cevap

11

Bu sütunlardan biri değil, eksik olan bir rownames var. Bir sütun olarak Markaları istiyorsanız

, manuel yaklaşımdır:

data.table(Brands = rownames(mtcars), mtcars) 

Alternatif:

data.table(mtcars, keep.rownames = TRUE) 

Ancak bu çıkan data.table eski olması yapmaz rownames, sadece "rn" olarak adlandırılan, onlar için bir sütun yapar. Bu belgede, ?data.table.


Alternatif olarak, DF = mtcars için, yerinde tabloyu değiştirmek:

setDT(DF, keep.rownames = "Brands") 

Minör noktası: biz setDT(mtcars, ...) olamaz, mtcars yerleşik bir tablodur beri.

+1

İşaretçi için teşekkürler. – KFB

+1

Alternatif olarak, "rn" varsayılanından başka bir isim seçmek istiyorsanız 'data.table (mtcars, keep.rownames =" Brands ")' yazabilirsiniz. (Kullanılan data.table'ın CRAN sürümü 1.10.4). – Uwe

+0

@UweBlock 1.10.5'te test ediliyor, bu Markalar sütununu oluşturmuyor. Bu setDT için çalışıyor, yine de ... Bunu düzenliyorum. Teşekkürler – Frank

İlgili konular