不知道您当前的“肮脏”方式是什么,这是一个可能的解决方案:
> aFac <- interaction(data.frame(a), lex.order=TRUE)
> factor(aFac, levels = levels(aFac), labels = seq_along(levels(aFac)))
[1] 1 1 2 3 3 4
Levels: 1 2 3 4
在哪里:
a <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L),
.Dim = c(6L, 2L), .Dimnames = list(NULL, NULL))
我使用的唯一原因lex.order = TRUE
是匹配您的特定输出。
另一种可能是:
> aFac <- interaction(data.frame(a), lex.order=TRUE, drop = TRUE)
> factor(as.numeric(aFac))
[1] 1 1 2 3 3 4
Levels: 1 2 3 4
这drop = TRUE
是从 中删除任何未使用的级别interaction
,正如我们将在下面的评论中的示例中得到的那样。
为了证明 的影响drop = TRUE
,请考虑以下因素,并注意产生的因子水平:
> b <- structure(c(1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1), .Dim = c(6L,2L))
> bFac1 <- interaction(data.frame(b), lex.order=TRUE)
> bFac2 <- interaction(data.frame(b), lex.order=TRUE, drop=TRUE)
> factor(as.numeric(bFac1))
[1] 3 4 3 2 2 4
Levels: 2 3 4
> factor(as.numeric(bFac2))
[1] 2 3 2 1 1 3
Levels: 1 2 3