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.