3

colsplitを使用して、データフレーム内のベクトルを分割しようとしています。colsplitのargとして正規表現があるという事実は、それが柔軟である可能性があると私に思わせますが、私は問題を抱えています(Rの正規表現を理解していないだけかもしれません)。

ここに問題があります:

ベクトルを作成しましょう...

> library(reshape)
> my_var_1 <- factor(c("x00_aaa_123","x00_bbb_123","x00_ccc_123","x01_aaa_123","x01_bbb_123","x01_ccc_123","x02_aaa_123","x02_bbb_123","x02_ccc_123"))

最初のアンダースコアで2つの列に分割したいと思います。言い換えれば、私は私の最終結果がこれになることを望んでいます...

    x whatever
1 x00  aaa_123
2 x00  bbb_123
3 x00  ccc_123
4 x01  aaa_123
5 x01  bbb_123
6 x01  ccc_123
7 x02  aaa_123
8 x02  bbb_123
9 x02  ccc_123

私はそれを行うcolspan内の適切な正規表現を見つけようとしていますが、運がありません。これが私が得ることができる最も近いものです...

> colsplit(my_var_1, split="_", c("x","whatever")) 
    x whatever NA.
1 x00      aaa 123
2 x00      bbb 123
3 x00      ccc 123
4 x01      aaa 123
5 x01      bbb 123
6 x01      ccc 123
7 x02      aaa 123
8 x02      bbb 123
9 x02      ccc 123

これは、分割正規表現を単純な区切り文字として使用し、3つの列を提供します。2番目のアンダースコアを分割したくない(さらに悪いことに、私の実際のデータでは、2つだけではなく任意の数のアンダースコアがあります)。

欲しいものを出す「スプリット」に使える表現はありますか?

colsplitの正規表現によってグループでの一致が可能になり、グループの一致が分割の内容になることを期待していましたが、そうではないようです。

*編集(@Joshuaulrichのおかげで)新しいreshape2を使用すると、colsplitは「意図したとおりに」機能します!!!

4

1 に答える 1

6

あなたのコードは私のためにエラーをスローします:

> colsplit(my_var_1, split="_", c("x","whatever"))
Error in colsplit(my_var_1, split = "_", c("x", "whatever")) : 
  unused argument(s) (split = "_")

splitの引数ではありませんcolsplit。必要な引数はpattern、です。または、位置の一致に依存することもできます。

> colsplit(my_var_1, "_", c("x","whatever"))
    x whatever
1 x00  aaa_123
2 x00  bbb_123
3 x00  ccc_123
4 x01  aaa_123
5 x01  bbb_123
6 x01  ccc_123
7 x02  aaa_123
8 x02  bbb_123
9 x02  ccc_123
于 2011-12-01T22:54:09.973 に答える