2012-02-09 75 views
5

cbind或之後(例如,添加一個或多個和的餘量),昏暗名稱會丟失(請參閱y)。我發現這個「解決方法」,但想知道是否有一個解決方案,這看起來不那麼hacky。也許有些事情可以在飛行中完成?我想保留類table的對象。在cbind或rbind之後丟失表名的名稱

> (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

這甚至沒有做你想做的,因爲「y」不再是class ==「table」。 – 2012-02-09 16:23:33

+0

現在呢? :) as.table(as.table(y))' – 2012-02-09 23:57:54

回答

3

addmargins怎麼樣?它默認計算總和,但可以插入任何自定義函數。例如:

> 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

我一直在使用'margin.table',但沒有注意到'addmargins'(從'margin.table'鏈接)真的有用。謝謝。稍微修改一下('addmargins(x,margin = c(1,2),FUN = list(total ='sum'),quiet = TRUE)'),我就可以非常優雅地得到我想要的東西。 – 2012-02-10 00:02:06

+0

然而,平均值是通過3個表格列和和列來計算的,所以實際上這是錯誤的。有沒有解決的辦法? – ivan 2017-07-18 18:38:40