这看起来很简单,但我无法在任何地方找到一个简单的答案。
如果我们有以下数据并使用table()
:
df <- data.frame(x=c("a","b","a"),y=c("b","a","c"))
table(df)
y
x a b c
a 0 1 1
b 1 0 0
最简单的方法是获得:
y
x a b c
a 0 1 1
b 1 0 0
C 0 0 0
之后手动添加c
行。
答案 0 :(得分:8)
这是一种方法。从本质上讲,您需要确保x
和y
都具有相同的级别。我这样做是通过计算各自union()
的{{1}}然后levels()
原始transform()
和x
两者都有这个共同的级别:
y
您的示例有一个简单的解决方案 - 只需> df <- data.frame(x=c("a","b","a"),y=c("b","a","c"))
> lev <- with(df, sort(union(levels(x), levels(y))))
> lev
[1] "a" "b" "c"
> df <- transform(df, x = factor(x, levels = lev), y = factor(y, levels = lev))
> table(df)
y
x a b c
a 0 1 1
b 1 0 0
c 0 0 0
与x
相同的级别,因为y
的级别已完成。在一般情况下,y
和x
都没有一套完整的关卡,我展示的代码将为您提供完整的设置,因此适用于这两种情况。
答案 1 :(得分:0)
更简单的方法是:
levels(df$x) <- levels(df$y) <- union(levels(df$x), levels(df$y))
通常或
levels(df$x) <- levels(df$y)
针对您的具体情况。
然后调用表(df)。基本上,您需要为表格指定可能的“级别”。