R + изменить: используя colsplit с регулярным выражением
Я пытаюсь использовать colsplit, чтобы разбить вектор в кадре данных. Тот факт, что у нас есть регулярное выражение как arg to colsplit, заставляет меня думать, что это может быть гибким, но у меня возникли проблемы (возможно, я просто не понимаю регулярное выражение в 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
Это использует разделенное регулярное выражение в качестве простого разделителя и дает мне три столбца. Я не хотел бы разбивать второе подчеркивание (что еще хуже, в моих реальных данных у меня есть произвольное количество подчеркиваний, а не только два).
Можно ли использовать выражение для "split", которое даст то, что я хочу?
Я надеялся, что регулярное выражение в colsplit позволит мне сопоставлять группы, а групповые совпадения будут содержимым разбиений, но, похоже, это не так.
* редактировать (благодаря @Joshuaulrich) colsplit работает "как задумано" при использовании более нового reshape2!!!
1 ответ
Ваш код выдает ошибку для меня:
> 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