質問
私は使用しています xtabs
含むいくつかのデータを集計します NA
s。合計が完了していることを確認するために、私は使用しています addNA
因子レベルが欠落しているものを数える。
ただし、使用すると問題が発生します xtable
あるので、oosingのためにラテックスにエクスポートします NA
s行と列名にsがあります。解決策があります:
rownames(tab)[is.na(rownames(tab))]<-"NA"
colnames(tab)[is.na(colnames(tab))]<-"NA"
しかし、これは多くのテーブルにとって面倒になる可能性がありますが、これをより自動的に行う方法はありますか?それとも、そもそもテーブルを作成するより良い方法はありますか?
解決
興味深い質問。 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}
他のヒント
考慮すべき別の解決策は、変更されたものを使用することです 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
}
所属していません StackOverflow