R:因子相互作用的逆

时间:2012-05-09 18:14:31

标签: r interaction string-split

我在遇到以下问题时遇到了很多麻烦,似乎无法通过广泛的搜索找到答案。如果我有以下内容:

> fac1 <- factor(c("a", "b", "c"))
> fac2 <- factor(c("d", "e", "f"))
> fac3 <- interaction(fac1,fac2)
> fac3

[1] a.d b.e c.f
Levels: a.d b.d c.d a.e b.e c.e a.f b.f c.f

我可以运行什么功能来分割fac3,以便获得放入交互中的原始因子的级别?那样:

> myFun(fac3, 1)
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c"
> myFun(fac3, 2)
[2] "d" "d" "d" "e" "e" "e" "f" "f" "f"

感谢。

2 个答案:

答案 0 :(得分:5)

> myFun <- function(fac, idx) sapply( strsplit(as.character(fac), "\\."), "[", idx)
> myFun(fac3,1)
[1] "a" "b" "c"
> myFun(fac3,2)
[1] "d" "e" "f"

根据您对这些向量的要求,您可以在结果周围包含factor()。你的问题有些含糊不清。看看@ user1317221的贡献我看到它确实返回了你所说的你想要的但是当你说你想要因素的水平时,我认为你想要的载体只有'fac3'有三个元素,尽管有更长的水平属性。

答案 1 :(得分:2)

您可以轻松将以下内容转换为函数

sapply(strsplit(as.character(fac3), "\\."), "[", 1)
sapply(strsplit(as.character(fac3), "\\."), "[", 2)