Как создать новые столбцы в data.frame на основе буквенных и числовых символьных объектов в столбце в R
У меня есть фрейм данных со столбцом, заполненным данными примерно так, по хромосоме, а затем по базовой позиции, все в одном столбце. Я заполнил оставшиеся столбцы с V2 по V5 целыми числами, чтобы имитировать похожий data.frame.
> test
V1 V2 V3 V4 V5
1 I.1286480 9 17 25 33
2 I.1898932 10 18 26 34
3 I.11871397 11 19 27 35
4 II.1252994 12 20 28 36
5 II.18175911 13 21 29 37
6 III.10298347 14 22 30 38
7 IV.123478912 15 23 31 39
8 V.12837471234 16 24 32 40
с другими данными в следующих столбцах. Это огромный набор данных с 115 000 строк. Я хочу сделать два новых столбца, один из которых содержит римские цифры (I, II, III, IV, V), а другой - номер, следующий за римскими цифрами. Проблемы, с которыми я сталкиваюсь, заключаются в том, что это вектор символьных объектов, поэтому я не уверен, как разобрать буквы из цифр. Я пытался использовать StrPos из пакета DescTools, но
> StrPos(test$V1, "I")
[1] 1 1 1 1 1 1 1 NA
> StrPos(test$V1, "I.")
[1] 1 1 1 1 1 1 1 NA
он возвращает позиции всех "я", а не только объектов с одним экземпляром "я". Мне интересно substring
должно сработать? Но тогда у меня возникает проблема, что все римские цифры имеют разную длину, а также числа, следующие за римскими цифрами, также имеют разную длину. Я знаю, что должно быть простое решение этой проблемы, но единственное, что я могу придумать, это очень долго for
а также if
петли. Помоги мне, stackru, ты моя единственная надежда!
1 ответ
С помощью separate
от tidyr
:
library(tidyr)
separate(test, V1, into = c("chr", "pos"))
chr pos V2 V3 V4 V5
1 I 1286480 9 17 25 33
2 I 1898932 10 18 26 34
3 I 11871397 11 19 27 35
4 II 1252994 12 20 28 36
5 II 18175911 13 21 29 37
6 III 10298347 14 22 30 38
7 IV 123478912 15 23 31 39
8 V 12837471234 16 24 32 40