2012-01-15 9 views
2

私は大きなデータフレームを持っており、すべての可変パラグラフを表にしたいと考えています。テーブル()とXTABS()これを行うが、問題があるの両方:R-xtabs()vs table():レベルを落として変数名を定義しますか?

  1. XTABS()は私が必要とする未使用の変数のレベルを、ドロップすることができますが、 私はディメンションの名前を定義することはできません。
  2. table()では、ディメンション名を定義できますが、未使用レベルを削除することはできません。

私はdimensionnamesを定義する必要がある理由は、このすべてが(私は「皆によって皆」を実行する必要がbecasue)forループ内で発生し、これは名前が無意味レンダリングするということです。以下は、私が意味することを示すための「シンプルな」例です。

var.3=factor(rep(c("m","f","t"), c(5,5,2))) 
df <- data.frame(var.1=rep(1:4, 1:4), var.2=rep(c("A","B"), 5), var3=var.3[1:10]) 
levels(df[,3])   # the "t" level is not in the df! 
tabs.list<- list() 
xtabs.list<- list() 
for (i in 1:(ncol(df)-1)){ 
    for (j in (i+1):ncol(df)) { 
    tabs.list[[paste(sep=" ", colnames(df)[i], "by",colnames(df)[j])]] <- 
     table(df[,i],df[,j], dnn=list(colnames(df)[i], colnames(df)[j])) 
    xtabs.list[[paste(sep=" ", colnames(df)[i], "by",colnames(df)[j])]] <- 
     xtabs(~df[,i]+df[,j], drop.unused.levels=TRUE) 
    } 
} 
tabs.list 
xtabs.list 
#What I want: 
for (i in 1:length(xtabs.list)){ 
names(dimnames(xtabs.list[[i]])) <- names(dimnames(tabs.list[[i]])) 
} 
xtabs.list 

ので、データをそれぞれcrossclassifyingための2つの機能は、私が使用したいオプションを持っています!なぜ私は両方を行うことができないのですか?

答えて

2

それはas.character

tabs.list<- list() 
for (i in 1:(ncol(df)-1)){ 
    for (j in (i+1):ncol(df)) { 
     tabs.list[[paste(sep=" ", colnames(df)[i], "by",colnames(df)[j])]] <- 
     table(as.character(df[,i]), 
       as.character(df[,j]), 
       dnn=list(colnames(df)[i], colnames(df)[j])) 
           } 
          } 
tabs.list 
+0

ああコースで包むことにより、「脱因数分解」の引数には非常に簡単です。レベルを落とすことはすべて要因についてです。そのDwinに感謝します! – maja

関連する問題