Sorum, kopyalamaya karşı referans ile atama ile ilgili data.table
. Birinin referansla benzer şekilde satırları silip silemeyeceğini bilmek istiyorum
DT[ , someCol := NULL]
Hakkında bilmek istiyorum
DT[someRow := NULL, ]
Sanırım bu işlevin var olmamasının iyi bir nedeni var, bu yüzden belki de aşağıdaki gibi olağan kopyalama yaklaşımına iyi bir alternatif gösterebilirsiniz. Özellikle, örneğin favorim ile gitmek (data.table),
DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9)
# x y v
# [1,] a 1 1
# [2,] a 3 2
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 9
Diyelim ki bu satırdaki ilk satırı silmek istiyorum. Tablo. Bunu yapabileceğimi biliyorum:
DT <- DT[-1, ]
ancak genellikle bundan kaçınmak isteyebiliriz, çünkü nesneyi kopyalıyoruz (ve bu, N object.size(DT)
, burada işaret edildiği gibi yaklaşık 3 * N bellek gerektirir . Şimdi buldum set(DT, i, j, value)
. Belirli değerleri nasıl ayarlayacağımı biliyorum (burada olduğu gibi: tümünü ayarla) satır 1 ve 2'deki değerler ve sütun 2 ve 3 sıfıra)
set(DT, 1:2, 2:3, 0)
DT
# x y v
# [1,] a 0 0
# [2,] a 0 0
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 9
Ama ilk iki satırı nasıl silebilirim? iş
set(DT, 1:2, 1:3, NULL)
DT'nin tamamını NULL olarak ayarlar.
SQL bilgim çok sınırlı, bu yüzden bana söylüyorsunuz: data.table verilen SQL teknolojisini kullanıyor, SQL komutuna eşdeğer mi
DELETE FROM table_name
WHERE some_column=some_value
data.table içinde?
DT[ , keep := .I > 1]
, daha sonra yapılacak işlemler için alt küme gibi satırları tutmak için bir bayrak tanımlamak yeterli olmalıdır : DT[(keep), ...]
belki de setindex(DT, keep)
bu alt kümenin hızı. Her derde deva değil, ancak iş akışınızda bir tasarım seçeneği olarak görülmeye değer - tüm bu satırları bellekten gerçekten silmek istiyor musunuz yoksa hariç tutmayı mı tercih edersiniz? Cevap kullanım durumuna göre değişir.
data.table()
SQL farklı işlemler ve çeşitli argümanlar arasında bir paralel çizebilirsiniz kadar SQL teknolojisi kullanan olduğunu sanmıyorumdata.table
. Bana göre, "teknolojiye" yapılan atıfdata.table
, bir yerde bir SQL veritabanının üstünde otururken AFAIK'ın böyle olmadığı anlamına geliyor.