3

xtabsを含むいくつかのデータを集計するために使用していますNA。合計が完全であることを確認するために、addNA因子レベルが欠落しているものをカウントするために使用しています。

ただし、行名と列名に s が含まれxtableているため、Sweaving 用に LaTeX にエクスポートするときに問題が発生します。NA私は解決策を持っています:

rownames(tab)[is.na(rownames(tab))]<-"NA"
colnames(tab)[is.na(colnames(tab))]<-"NA"

しかし、これは多くのテーブルにとって面倒になる可能性があります。これをより自動的に行う方法はありますか? それとも、そもそもテーブルを作成するためのより良い方法はありますか?

4

2 に答える 2

6

興味深い質問です。xtable自体を使用してこれを処理する方法も見つかりませんでした。したがって、私が提案できる最善の方法は、回避策を簡単に呼び出せる小さな関数に変えることです。

例えば:

# Construct some data
df <- data.frame(
  x1 = addNA(sample(c(NA, LETTERS[1:4]), 100, replace = TRUE)),
  x2 = addNA(sample(c(NA, letters[24:26]), 100, replace = TRUE))
)

# Create a function to rename NA row and column names in a data.frame
rename_NA <- function(x){
  rownames(x)[is.na(rownames(x))] <- "NA"
  colnames(x)[is.na(colnames(x))] <- "NA"
  x
}

tab <- rename_NA(xtabs(~x1+x2, data=df))
xtable(tab)

これにより、エラーなしで有効なラテックスが作成されます。

% latex table generated in R 2.13.0 by xtable 1.5-6 package
% Wed Apr 27 17:20:21 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrrr}
  \hline
 & x & y & z & NA \\ 
  \hline
A & 4.00 & 7.00 & 10.00 & 4.00 \\ 
  B & 6.00 & 5.00 & 4.00 & 2.00 \\ 
  C & 8.00 & 4.00 & 4.00 & 2.00 \\ 
  D & 8.00 & 5.00 & 1.00 & 6.00 \\ 
  NA & 5.00 & 2.00 & 7.00 & 6.00 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
于 2011-04-27T16:23:38.490 に答える
2

考慮すべき別の解決策はaddNA、最初に因子レベルを文字列として出力できるように変更を使用することです。

addNA2 <- function (x, ifany = FALSE, as.string = TRUE)
{
    if (!is.factor(x)) 
        x <- factor(x)
    if (ifany & !any(is.na(x))) 
        return(x)
    ll <- levels(x)
    if (!any(is.na(ll))) 
        ll <- c(ll, NA)
    x <- factor(x, levels = ll, exclude = NULL)
    if(as.string) levels(x)[is.na(levels(x))] <- "NA"
    x
}
于 2011-04-28T10:28:43.490 に答える