Два решения:
Вот двухэтапное решение с использованием str_extract
из пакета stringr
.
Первый шаг - разбить цепочки создания стоимости на отдельные значения:
df1 <- unlist(strsplit(df, " "))
Второй шаг - разделить значения на =
и назначить половинки значения двум столбцам нового фрейма данных:
df2 <- data.frame(
col1 = str_extract(df1, "(-)?\\d+(?==)"),
col2 = str_extract(df1, "(?<==)(-)?\\d+")
)
В качестве альтернативы приведем одношаговое решение с использованием str_extract_all
:
df1 <- data.frame(
col1 = unlist(str_extract_all(df, "(-)?\\d+(?==)")),
col2 = unlist(str_extract_all(df, "(?<==)(-)?\\d+"))
)
РЕДАКТИРОВАТЬ:
Если данные являются частью кадра данных с данными для разделения, называемыми Var1
, код будет следующим:
df1 <- data.frame(
col1 = unlist(str_extract_all(df$Var1, "(-)?\\d+(?==)")),
col2 = unlist(str_extract_all(df$Var1, "(?<==)(-)?\\d+"))
)
Результат:
df2
col1 col2
1 98440 9
2 98450 9
3 98500 9
4 98520 9
5 98530 9
6 98540 9
7 98550 9
8 98555 9
9 98560 9
10 98570 9
11 98590 9
12 98600 9
13 98620 9
14 98630 9
15 98690 9
16 98920 3
17 98930 5
18 98940 5
19 98950 9
20 98990 11
21 99900 -1
22 99910 11
23 99920 -1
24 99930 11
25 -1 -1
26 -2 -1
27 99999 -1