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の貢献を見ると、あなたが望むものが返されることがわかりますが、因子のレベルが必要であると言ったとき、レベルが長いにもかかわらず、3つの要素を持つ「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 に答える