R:interaction():组合而不是排列

时间:2015-11-15 01:43:28

标签: r

在R中使用interaction()函数时,13和31被视为不同的交互。我想认为它们是一样的。

factor1 <- c(rep(1,3), rep(2,3), rep(3,3))
factor2 <- c(rep(c(1,2,3), 3))

combined <- interaction(factor1, factor2, sep = "")

组合现在看起来像这样:

> combined
[1] 11 12 13 21 22 23 31 32 33
Levels: 11 21 31 12 22 32 13 23 33

但我希望它看起来像这样:

> combined
[1] 11 12 13 12 22 23 13 23 33
Levels: 11 12 13 22 23 33

有优雅的方法吗?

1 个答案:

答案 0 :(得分:2)

先排序;然后降低水平:

f1 = pmin(factor1, factor2)
f2 = pmax(factor1, factor2)

droplevels(interaction(f1, f2, sep=""))
# [1] 11 12 13 12 22 23 13 23 33
# Levels: 11 12 22 13 23 33

如果您对字符串结果没问题,paste0(f1,f2)会更简单。