SORU
8 ŞUBAT 2012, ÇARŞAMBA


Nasıl veri sütun silmek.tablo?

Bir sütun "adlı bir data.frame, yapabileceğim: . foo kurtulmak için

df <- df[-grep('foo',colnames(df))]

df data.table bir nesneye dönüştürülür ancak, bir kez, sadece bir sütunu kaldırmak için yolu yoktur.

Örnek:

df=data.frame(id=1:100,foo=rnorm(100))
df2 <- df[-grep('foo',colnames(df))] # works
df3=data.table(df)
df3[-grep('foo',colnames(df3))] 

Ama data.table nesneye dönüştürüldükten sonra, bu artık çalışmıyor.

CEVAP
8 ŞUBAT 2012, ÇARŞAMBA


Aşağıdaki herhangi bir veri sütunu foo kaldıracaktır.tablo df3:

# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]

# Method 2a -- A safe idiom for excluding columns matching a regular expression
df3 <- df3[, which(!grepl("^foo$", colnames(df3))), with=FALSE]

# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3 <- df3[, grep("^foo$", colnames(df3), invert=TRUE), with=FALSE]

veri.tabloayrıca aşağıdaki sözdizimini destekler:

## Method 3 (could then assign to df3, 
df3[, !"foo", with=FALSE]  

ama eğer sen gerçekten istemek kaldırmak sütun "foo" df3 (karşıt olarak bir yazıcı görünümü df3 eksi sütun "foo") gerçekten kullanmak istiyorsanız Yöntem 1 yerine.

(Not, Eğer kullandığınız bir yöntem güvenerek grep() grepl(), set pattern="^foo$" yerine "foo", eğer istemiyorsan sütun adları gibi "fool" "buffoon" (yani içerenler foo gibi bir dize) için de aynı kaldırıldı.)

Daha az güvenli seçenek, etkileşimli kullanım için iyi

Önümüzdeki iki cümleler de işine yarardf3 sütun "foo" eşleşen içerirama eğer öyle değilse muhtemelen beklenmedik bir şekilde başarısız olur. Örneğin, bunlardan herhangi varolmayan sütunu aramak için kullanıyorsanız "bar" sıfır-sıralı veri ile bitireceğiz.tablo.

Sonuç olarak, çok iyi, örneğin, bir veri görüntülemek için isteyebilirsiniz interaktif kullanım için uygundur.isimleri alt "foo" içeren tablo eksi herhangi bir sütun. Programlama amacıyla, Yöntem 1, 2a, 2b ve gerçekten iyi bir seçenek.

# Method 4a:
df3 <- df3[,-grep("^foo$", colnames(df3)), with=FALSE]

# Method 4b: 
df3 <- df3[, !grepl("^foo$", colnames(df3)), with=FALSE]

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Brenan

    Dylan Brenan

    22 Aralık 2009
  • kimaliz

    kimaliz

    18 Temmuz 2006
  • Study with Substance P

    Study with S

    31 Mayıs 2008