data.table
Dodawanie i modyfikowanie kolumn
Szukaj…
Uwagi
Oficjalna winieta „semantyka odniesienia” jest najlepszym wprowadzeniem do tego tematu.
Przypomnienie: składnia DT[where, select|update|do, by]
jest używana do pracy z kolumnami tabeli danych.
- Część „gdzie” to argument
i
- Część „select | update | do” jest argumentem
j
Te dwa argumenty są zwykle przekazywane według pozycji zamiast nazwy.
Wszystkie modyfikacje kolumn można wykonać w j
. Dodatkowo dla tego zastosowania dostępna jest funkcja set
.
Edycja wartości
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Edycja kolumny
Użyj operatora :=
wewnątrz j
aby utworzyć nowe kolumny lub zmodyfikować istniejące:
DT[, mpg_sq := mpg^2]
Edycja w podzbiorze wierszy
Użyj argumentu i
aby podgrupować wiersze „tam, gdzie” należy wprowadzić zmiany:
DT[1:3, newvar := "Hello"]
Podobnie jak w ramce data.frame, możemy dokonać podzbioru za pomocą numerów wierszy lub testów logicznych. Możliwe jest również użycie [„dołączenia” w i
podczas modyfikacji] [need_a_link].
Usuwanie kolumny
Usuń kolumny, ustawiając NULL
:
DT[, mpg_sq := NULL]
Zauważ, że nie <-
przypisujemy wyniku, ponieważ DT
został zmodyfikowany w miejscu.
Edycja wielu kolumn
Dodaj wiele kolumn, używając formatu wielowymiarowego operatora :=
:
DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]
Składnia .()
Jest używana, gdy prawa strona LHS := RHS
jest listą kolumn.
Edycja wielu kolejno zależnych kolumn
Jeśli kolumny są zależne i muszą być zdefiniowane po kolei, można to zrobić na kilka sposobów:
DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]
Edycja kolumn według dynamicznie określonych nazw
W przypadku dynamicznie określanych nazw kolumn użyj nawiasów:
vn = "mpg_sq"
DT[, (vn) := mpg^2]
Korzystanie z set
Kolumny można również modyfikować za pomocą set
celu niewielkiego zmniejszenia narzutu, choć rzadko jest to konieczne:
set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)
Zmiana kolejności kolumn
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Aby zmienić kolejność kolumn, użyj setcolorder
. Na przykład, aby je odwrócić
setcolorder(DT, rev(names(DT)))
To nie kosztuje prawie nic pod względem wydajności, ponieważ po prostu pozwala na listę wskaźników kolumn w tabeli data.table.
Zmienianie nazw kolumn
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Aby zmienić nazwę kolumny (zachowując te same dane), nie ma potrzeby kopiowania danych do kolumny o nowej nazwie i usuwania starej. Zamiast tego możemy użyć
setnames(DT, "mpg_sq", "mpq_squared")
aby zmodyfikować oryginalną kolumnę przez odniesienie.
Modyfikowanie poziomów czynników i innych atrybutów kolumn
# example data
DT = data.table(iris)
Aby zmodyfikować poziomy współczynników przez odniesienie, użyj setattr
:
setattr(DT$Species, "levels", c("set", "ver", "vir")
# or
DT[, setattr(Species, "levels", c("set", "ver", "vir"))]
Druga opcja może wydrukować wynik na ekranie.
Dzięki setattr
unikamy kopiowania zwykle powstającego podczas wykonywania levels(x) <- lvls
, ale pomija również niektóre testy, dlatego ważne jest, aby uważać, aby przypisać prawidłowy wektor poziomów.