2014-07-02 23 views
25

Tôi có sau data.table:giá trị cột có điều kiện thay thế với data.table

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

Bây giờ tôi muốn thay thế tất cả là 1 trong col2 có giá trị "bigDog". Tôi có thể làm điều đó bằng cách sử dụng tinh thần data.frame:

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

Nhưng tôi tự hỏi, nếu có một cách khác nhau, hơn "data.table định hướng"?

Trả lời

31

Đã bạn không muốn thay đổi kiểu của cột, bạn muốn làm:

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

Với sự thay đổi chủng loại, bạn có thể làm:

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

Nếu bạn không thay đổi loại đầu tiên, "bigDog" sẽ bị ép buộc thành số nguyên, tức là NA. Bạn cũng sẽ nhận được một loạt các cảnh báo về điều đó tất nhiên.

Lưu ý rằng bên cạnh cú pháp ít cồng kềnh hơn, sử dụng := có lợi thế là không tạo thêm bản sao dữ liệu (như <- sẽ) và thay vào đó sửa đổi tại chỗ.

+0

Giả sử tôi không muốn thay đổi loại cột, làm cách nào tôi có thể áp dụng việc sử dụng đầu tiên cho nhiều cột (được đặt tên)? – rimorob

+1

@rimorob chắc chắn - 'dt [điều kiện, \': = \ '(col2 = 123, col3 = 234, ...)]' – eddi

Các vấn đề liên quan