Odpowiedzi:
W przypadku wersji data.table >= 1.9.8
działają tylko następujące elementy:
library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)
# select single column by index
dt[, 2]
# b
# 1: 2
# select multiple columns by index
dt[, 2:3]
# b c
# 1: 2 3
# select single column by name
dt[, "a"]
# a
# 1: 1
# select multiple columns by name
dt[, c("a", "b")]
# a b
# 1: 1 2
Wersje data.table < 1.9.8
(dla których wybór kolumny numerycznej wymagał użycia with = FALSE
) można znaleźć w poprzedniej wersji tej odpowiedzi. Zobacz także WIADOMOŚCI w wersji 1.9.8, POTENCJALNIE WYJĄTKOWE ZMIANY, punkt 3.
DT[,list(b:c)
, ponieważ uznałem za wygodne przekształcanie kolumn bezpośrednio w tabeli danych, np. mogę to zrobić DT[,list(1/b,2*c)]
, ale to nie działa z.
with=FALSE
w tym przypadku będzie niepotrzebna: github.com/Rdatatable/data.table/issues/ ...
data.frame
kompatybilnego sposobu użycia with=FALSE
. Jednak od około 3 tygodni temu, wersja rozwojowa data.table został zmodyfikowany do połączeń, takich jak dt[, 2]
, dt[, 2:3]
, dt[, "b"]
, i dt[, c("b", "c")]
zachowują się tak samo jak robią to w ze data.frame
s bez konieczności jawnie ustawione with=FALSE
. To straszne! Zobacz tutaj dla konkretnego zatwierdzenia, w tym wpis NEWS opisujący zmianę.
To trochę rozwlekłe, ale przyzwyczaiłem się do używania ukrytej .SD
zmiennej.
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
To trochę kłopotliwe, ale nie tracisz innych funkcji data.table (nie sądzę), więc nadal powinieneś być w stanie korzystać z innych ważnych funkcji, takich jak łączenie tabel itp.
Od wersji 1.10.2 możesz również używać ..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
dt[, !..keep_cols]
i dt[, -..keep_cols]
działa zgodnie z oczekiwaniami!
@Tom, bardzo dziękuję za wskazanie tego rozwiązania. Działa świetnie dla mnie.
Szukałem sposobu, aby po prostu wykluczyć jedną kolumnę z drukowania iz powyższego przykładu. Aby wykluczyć drugą kolumnę, możesz zrobić coś takiego
library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
dt[,"a"]
idt[,"a", with=FALSE]
zobacz, jaka to naprawdę pomocna opcja.