2012-05-09 26 views
2

我對以下問題有很大的麻煩,並且似乎無法找到廣泛搜索的答案。如果我有以下幾點:R:因素交互的反向

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

謝謝。

回答

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'就有三個元素,儘管它有更長的水平屬性。

+0

謝謝,這偉大工程。 strsplit是我正在尋找的核心內容,但是對於我來說,「[」作爲sapply中的一個函數也是新的。 –

+0

是的。我承認,學會思考「[」作爲中綴函數有點不同。 –

+0

我認爲,我只是訓練有素地看到一個沒有關閉的開放式支架作爲等待發生的問題。你提供的功能正是我一直在尋找的。 –

2

你可以很容易地把下列句子變成一個功能

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