R: 因子交互作用的逆操作

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"

谢谢。

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”长度相同的向量,尽管具有更长的级别属性。


谢谢,非常好用。strsplit是我一直在寻找的核心部分,但sapply中"["作为函数的使用对我来说也是新的。 - Michael Sorensen
是的。学习将“ [”视为中缀函数有点不同,我承认。 - IRTFM
我觉得我已经训练成了一种习惯,只要看到一个没有配对闭合括号的开括号,就会认为这是一个难以避免的问题。你提供的函数正是我在寻找的。 - Michael Sorensen
解析器将 object[arg1, arg2] 转换为 '['(object, arg1, arg2),请参见 ?Extract。因此,它将 [] 对作为紧接在开括号之前的项的函数以及封闭括号内的项进行处理。 - IRTFM

2
你可以很容易地将以下内容转换为函数。
sapply(strsplit(as.character(fac3), "\\."), "[", 1)
sapply(strsplit(as.character(fac3), "\\."), "[", 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接