3

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

> 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"

谢谢。

4

2 回答 2

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”,尽管级别更长属性。

于 2012-05-09T18:25:28.230 回答
2

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

sapply(strsplit(as.character(fac3), "\\."), "[", 1)
sapply(strsplit(as.character(fac3), "\\."), "[", 2)
于 2012-05-09T18:25:58.047 回答