3

私はこの種のxtabsオブジェクトを持っています:

structure(c(1, 4, 7, 2, 5, 8, 3, 6, 9), .Dim = c(3L, 3L), 
.Dimnames = structure(list(Var1 = c("A", "B", "C"), Var2 = c("A", "B", "C")),
.Names = c("Var1", "Var2")), class = c("xtabs", "table"))

与える:

    Var2
Var1 A B C
   A 1 2 3
   B 4 5 6
   C 7 8 9

Var1と の 2 つの値、Var2たとえば "A" と "B" を、分割行列のプロパティを維持したまま新しい値 "D"にマージしたいと考えています。

したがって、結果は次のようになります。

     Var2
Var1  D C
   D 12 9 
   C 15 9 
4

2 に答える 2

3

xtabs オブジェクトを に読み込むaと、次のことができます。

b<-as.data.frame.table(a)
levels(b$Var1) <- list(D=c("A","B"),C="C")
levels(b$Var2) <- list(D=c("A","B"),C="C") #Thanks @Henrik!
xtabs(Freq ~ Var1 + Var2, b)

いくつかのマージを使用して、より大きな要因に適応できる代替アプローチ b$Var1.merge <-b$Var1 b$Var2.merge <-b$Var2

# Add the new level for the factors
levels(b$Var1.merge) <- c(levels(b$Var1.merge), "D")
levels(b$Var2.merge) <- c(levels(b$Var2.merge), "D")

#Collapse the factors
b$Var1.merge[b$Var1%in%c("A","B")] <- "D"
b$Var2.merge[b$Var2%in%c("A","B")] <- "D"

xtabs(Freq ~ Var1.merge + Var2.merge, b, drop.unused.levels=T)

もちろん、元の xtabs オブジェクトがどこから来たかによって、元のデータでこれをより簡単に実行できる場合があります。

于 2014-12-16T20:06:45.530 に答える
1

これにより、data.frame ルートを使用した場合に要因を処理する際に発生する可能性がある問題が回避されます。

> tbl2 <- rbind(colSums(tbl[1:2, ]), tbl[3, ])
> tbl2
     A B C
[1,] 5 7 9
[2,] 7 8 9
> tbl3 <- cbind(rowSums(tbl2[, 1:2]), tbl2[ ,2] )
> tbl3
     [,1] [,2]
[1,]   12    7
[2,]   15    8

そして、これは、指定された一連の文字値を使用して折りたたむ方法を示しています。

> tbl2 <- rbind(colSums(tbl[row.names(tbl) %in% c("A","B"), ]), 
                 tbl[!row.names(tbl) %in% c("A","B"), ])
> tbl2
     A B C
[1,] 5 7 9
[2,] 7 8 9
> tbl3 <- cbind(rowSums(tbl2[, colnames(tbl) %in% c("A","B")]), 
                 tbl2[,!colnames(tbl) %in% c("A","B")] )
> tbl3
     [,1] [,2]
[1,]   12    9
[2,]   15    9
于 2014-12-16T20:19:01.670 に答える