Aşağıdakilerden herhangi biri foo
data.table öğesinden sütunu kaldıracaktır df3
:
# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]
df3[, c("foo","bar"):=NULL] # remove two columns
myVar = "foo"
df3[, (myVar):=NULL] # lookup myVar contents
# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]
# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]
data.table ayrıca aşağıdaki sözdizimini de destekler:
## Method 3 (could then assign to df3,
df3[, !"foo"]
aslında sütunu kaldırmak isteyen olsaydı gerçi "foo"
gelen df3
(sadece bir görünümünü baskı aksine df3
eksi hanesinde "foo"
) Gerçekten Yöntem 1 yerine kullanmak isterdim.
(Do not Eğer bir yöntem dayanarak kullanırsanız o grep()
ya grepl()
, sen ayarlamak gerekir pattern="^foo$"
ziyade "foo"
sizin gibi adlarla sütunları istemiyorsanız, "fool"
ve "buffoon"
(ihtiva yani o foo
da eşleşti ve kaldırılacak) bir alt dize olarak.)
Daha az güvenli seçenekler, etkileşimli kullanım için iyi:
- Önümüzdeki iki deyimler de çalışacaktır eğer df3
bir sütun eşleşmelerini içerir"foo"
- ama eğer bu olmuyorsa bir olasılıkla-beklenmedik bir şekilde başarısız olur. Örneğin, var olmayan sütunu aramak için bunlardan herhangi birini kullanırsanız "bar"
, sıfır satırlı bir data.table elde edersiniz.
Sonuç olarak, örneğin bir veri görüntülemek isteyebilecek etkileşimli kullanım için en uygun olanlardır. Örneğin eksi alt dizeyi içeren adlara sahip herhangi bir sütun "foo"
. Programlama amacıyla (veya sütunları df3
bir kopyadan ziyade gerçekten kaldırmak istiyorsanız), Yöntem 1, 2a ve 2b gerçekten en iyi seçeneklerdir.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Son olarak, yaklaşımı kullanan yaklaşımlar vardır with=FALSE
, ancak data.table
yavaş yavaş bu argümanı kullanmaktan uzaklaşmaktadır; burada göstererek gerçekten ihtiyacınız olması durumunda seçeneğin var olduğunu bilirsiniz:
# Method 5a (like Method 3)
df3[, !"foo", with=FALSE]
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]
dt
yerine data.table adını vermek daha net olurdudf3
...