2014-07-02 14 views
25

Mam następujący data.table:Warunkowo zastępujące wartości kolumny z data.table

dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1)) 

Teraz chcę zastąpić wszystkie 1 w col2 z wartością „BigDog”. Można to zrobić za pomocą data.frame ducha:

dt$col2[dt$col2==1,] <- "bigDog" 

Ale zastanawiam się, czy istnieje inny sposób, bardziej „data.table zorientowanych”?

Odpowiedz

31

Gdybyś nie chciał zmienić typ kolumny, można zrobić:

dt[col2 == 1, col2 := 123] 

Wraz ze zmianą typu, można zrobić:

dt[, col2 := as.character(col2)][col2 == "1", col2 := "bigDog"] 

Jeśli nie zmieniają najpierw typ, "bigDog" zostanie zmieniony na liczbę całkowitą, czyli NA. Oczywiście otrzymasz również kilka ostrzeżeń.

Zauważ, że składnia oprócz mniej uciążliwe, używając := ma tę zaletę, że nie dokonywania dodatkowych kopii danych (jak <- będzie) i zamiast modyfikuje w miejscu.

+0

Zakładając, że nie chcę zmieniać typu kolumny, w jaki sposób mogę zastosować pierwsze użycie do wielu (nazwanych) kolumn? – rimorob

+1

@rimorob sure - 'dt [warunek, \': = \ '(col2 = 123, col3 = 234, ...)] – eddi

Powiązane problemy