2015-04-13 14 views
5

c bir sütun için belirli bir değer ve x verilen bir değer c==x ve 0 ise 1'a eşittir. Genellikle, bir sütun c için kuklalar oluşturarak, bir seçim x birini hariç, son kukla sütun herhangi bir bilgi w.r.t. Zaten mevcut olan kukla sütunlar. İşteR: Bir (uzun) dummies listesi oluştururken uyarı

Ben data.table yılında, bir sütun firm için mankenleri uzun bir liste oluşturmak için çalışıyorum edebilirsiniz:

values <- unique(myDataTable$firm) 
cols <- paste('d',as.character(inds[-1]), sep='_') # gives us nice d_value names for columns 
# the [-1]: I arbitrarily do not create a dummy for the first unique value 
myDataTable[, (cols):=lapply(values[-1],function(x)firm==x)] 

Bu kod güvenilir küçük benzersiz değerleri vardı önceki sütunlar, çalıştı. firm Ancak büyüktür:

Warning message: 
    truelength (6198) is greater than 1000 items over-allocated (length = 36). See ?truelength. If you didn't set the datatable.alloccol option very large, please report this to datatable-help including the result of sessionInfo(). 

Bildiğim kadarıyla söyleyebilirim, hala tek ihtiyacım sütunlar vardır:

tr(values) 
num [1:3082] 51560090 51570615 51603870 51604677 51606085 ... 

Ben sütunlar eklemek için çalışan bir uyarı olsun. Bu sorunu görmezden gelebilir miyim? Gelecekteki hesaplamaları yavaşlatacak mı? Bunun ne yapılacağını ve truelength ile ilgili emin değilim.

+0

verileri, sadece bir örneği kullanmak sağlamak 'dput (myDataTable [01:10])'. ** Düzenle: ** eklenecek sütunların boyutuyla ilgili gibi görünüyor, bu nedenle örnek verilerinin paylaşılması kolay olmayabilir. Belirtilen seçeneği "length (values)" olarak ayarlamayı denediniz mi? – jangorecki

+2

6000+ sütun?!? :-O. '' Truelength' 'u okuyunuz ve 'n' argümanını' n' argümanı ile yarattığınız sütunların ne kadarında yedek yuvalar oluşturursunuz .. aksi takdirde uyarıyı alırsınız çünkü her defasında fazla tahsis ettik yuvalar kullanılır .. – Arun

+0

@Arun 'ncol (myDataTable)' bana [1] 3085' verir, böylece mesaj gerçekten anlam ifade etmiyor. Preallocate yapmadığım büyük bir yığın sütun eklediğimde her zaman etkisiz olduğumu doğru anlıyor muyum? Bu durumda, bu benzersiz bir işlem olduğundan, sanırım iyiyim. – FooBar

cevap

2

Arun'ın yorumunu yanıt olarak alma.
Beklenen Ncol daha büyük olacak numaraya data.table sütunların gerekli miktarda ön tahsis alloc.col işlevini kullanmalısınız.

alloc.col(myDataTable, 3200) 

Ek olarak uzun masaya senin geniş tabloyu yeniden şekillendirilmesi dikkate öneriyoruz tüketim verilerini nasıl şekline bağlı olarak, EAV bakın. Daha sonra, veri türü başına yalnızca bir sütuna sahip olmanız gerekir.

İlgili konular