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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow