2013-05-19 37 views
9

Đã có trường hợp như thế này. Đã cố gắng chuyển đổi lớp "mtcars" từ data.frame thành data.table.chuyển đổi cột data.frame thành data.table bị thiếu

"mtcars" dữ liệu:

> mtcars 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710   22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 

gốc lớp là "data.frame".

> str(mtcars) 
'data.frame': 32 obs. of 11 variables: 
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ... 
$ disp: num 160 160 108 258 360 ... 
$ hp : num 110 110 93 110 175 105 245 62 95 123 ... 
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... 
$ wt : num 2.62 2.88 2.32 3.21 3.44 ... 
$ qsec: num 16.5 17 18.6 19.4 17 ... 
$ vs : num 0 0 1 1 0 1 0 1 1 1 ... 
$ am : num 1 1 1 0 0 0 0 0 0 0 ... 
$ gear: num 4 4 4 3 3 3 3 4 4 4 ... 
$ carb: num 4 4 1 1 2 1 4 2 2 4 ... 

Chuyển đổi thành data.table. Tìm thấy Cột cho các thương hiệu xe hơi đã biến mất. Tại sao? Làm thế nào để giữ lại cột của thương hiệu?

> mtcars2 <- data.table(mtcars) 
> mtcars2 
    mpg cyl disp hp drat wt qsec vs am gear carb 
1: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
2: 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
3: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 

Muốn có dữ liệu.Với định dạng dữ liệu cuối cùng như sau - có tên cột mới là "Nhãn hiệu" cho cột thương hiệu đầu tiên. Làm thế nào để mã để thêm cột "Nhãn hiệu" từ bộ dữ liệu "mtcars" gốc?

Brands    mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710   22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 

Trả lời

11

Đó là tên đã thiếu, không phải một trong các cột.

Nếu bạn muốn thương hiệu như một cột, các phương pháp thủ công là:

data.table(Brands = rownames(mtcars), mtcars) 

Cách khác:

data.table(mtcars, keep.rownames = TRUE) 

Tuy nhiên, điều này không làm cho data.table dẫn có cũ rownames, nó chỉ làm cho một cột cho họ, được gọi là "rn". Đây là trong tài liệu, ?data.table.


Cách khác, sửa đổi các bảng tại chỗ, cho DF = mtcars:

setDT(DF, keep.rownames = "Brands") 

điểm nhỏ: chúng ta không thể setDT(mtcars, ...), vì mtcars là một bảng built-in.

+1

Cảm ơn con trỏ. – KFB

+1

Để thay thế, bạn cũng có thể viết 'data.table (mtcars, keep.rownames =" Brands ")' nếu bạn muốn chọn tên khác mặc định "rn". (CRAN phiên bản 1.10.4 của 'data.table' được sử dụng). – Uwe

+0

@UweBlock Thử nghiệm trên 1.10.5, không tạo cột Nhãn hiệu. Nó làm việc cho setDT, mặc dù ... Tôi đang chỉnh sửa điều đó. – Frank

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