这看起来很简单,但我在任何地方都找不到简单的答案。
如果我们有以下数据并使用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手动添加行。
这看起来很简单,但我在任何地方都找不到简单的答案。
如果我们有以下数据并使用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手动添加行。
这是一种方法。本质上,您需要确保x两者y具有相同的级别。我通过计算union()它们各自的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没有也没有y完整的关卡集,我展示的代码将为您获得完整的集,因此在这两种情况下都可以使用。
一个更简单的方法是:
levels(df$x) <- levels(df$y) <- union(levels(df$x), levels(df$y))
一般或
levels(df$x) <- levels(df$y)
针对你的具体情况。
然后调用表(df)。基本上,您需要为您的表指定可能的“级别”。