R +重塑:使用colsplit w / regex

时间:2011-12-01 22:50:21

标签: regex r reshape

我正在尝试使用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"))

我想在第一个下划线上将它分成两列。 换句话说,我希望我的最终结果是......

    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

它使用拆分正则表达式作为一个简单的分隔符,它给了我三列。我想不要拆分第二个下划线(更糟糕的是,在我的实际数据中,我有一个任意数量的下划线,而不仅仅是两个)。

是否有一个我可以用于“分裂”的表达式,它可以提供我想要的东西?

我曾希望colsplit中的正则表达式允许我匹配组,而组匹配将是分组的内容,但似乎并非如此。

* 编辑(感谢@Joshuaulrich)colsplit在使用较新的reshape2时“按预期”工作!!!

1 个答案:

答案 0 :(得分: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