2012-02-09 38 views
5

Sau cbind hoặc rbind đối tượng bảng (ví dụ, thêm một số tiền hoặc somesuch), tên của các tên mờ bị mất (xem y). Tôi tìm thấy điều này "workaround" nhưng đã tự hỏi nếu có một trong các giải pháp túi này có vẻ ít hacky. Có lẽ một cái gì đó có thể được thực hiện trên bay? Tôi muốn giữ đối tượng của lớp table.Mất tên của các dấu mờ của một bảng sau khi nhập hoặc viết

> (x <- table(1:3, sample(1:3), dnn = c("rows", "cols"))) 
    cols 
rows 1 2 3 
    1 1 0 0 
    2 0 0 1 
    3 0 1 0 
> (y <- cbind(x, "4" = 4:6)) # "rows" and "cols" get lost 
    1 2 3 4 
1 1 0 0 4 
2 0 0 1 5 
3 0 1 0 6 
> names(dimnames(y)) <- names(dimnames(x)) 
> y 
    cols 
rows 1 2 3 4 
    1 1 0 0 4 
    2 0 0 1 5 
    3 0 1 0 6 
+0

Điều đó thậm chí không làm những gì bạn muốn, vì "y" không còn là lớp == "bảng" nữa. –

+0

Còn bây giờ thì sao? :) 'as.table (as.table (y))' –

Trả lời

3

Làm thế nào về addmargins? Nó tính toán các khoản tiền theo mặc định, nhưng bạn có thể cắm bất kỳ (các) hàm tùy chỉnh nào. Ví dụ:

> addmargins(x, margin=c(2,2), FUN=list('sum', 'mean')) 
Margins computed over dimensions 
in the following order: 
1: cols 
2: cols 
    cols 
rows 1 2 3 sum mean 
    1 0.0 1.0 0.0 1.0 0.5 
    2 0.0 0.0 1.0 1.0 0.5 
    3 1.0 0.0 0.0 1.0 0.5 
+0

Tôi đã sử dụng 'margin.table' nhưng không nhận thấy' addmargins' hữu ích (được liên kết đến từ 'margin.table') thực sự là như thế nào. Cảm ơn bạn. Với một sửa đổi nhỏ ('addmargins (x, margin = c (1,2), FUN = list (tổng = 'sum'), quiet = TRUE)'), tôi nhận được chính xác những gì tôi muốn rất thanh lịch. –

+0

Tuy nhiên, giá trị trung bình được tính trên 3 cột bảng VÀ cột tổng hợp, do đó, thực tế nói nó sai. Có cách nào để giái quyết vấn đề này không? – ivan