Разделение столбца, содержащего строки неравной длины, на два столбца без разделителей - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь разбить столбец во фрейме данных на два столбца. Столбец, который я пытаюсь разбить, содержит строки неравной длины и не имеет разделителей. Это то, с чего я начинаю:

  t data1
1 1   10x
2 1   10y
3 2    1x
4 2    1y
5 3    2x
6 3    2y

И вот где я бы хотел добраться:

  t data1 data2
1 1    10     x
2 1    10     y
3 2     1     x
4 2     1     y
5 3     2     x
6 3     2     y

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Если у вас всегда есть переменное число цифр, за которыми следует один символ, вы можете сделать следующее:

df <- data.frame(
    t = c(1, 1, 2, 2, 3, 3),
    data1 = c("10x", "10y", "1x", "1y", "2x", "2y")
)

tidyr::separate(df, col = data1, into = c("data1", "data2"), sep = -1)
0 голосов
/ 05 февраля 2020

Вот решение data.table. Это идеандант количества цифр и символов. Он разбивает строку после первой последовательности цифр.

library(data.table)
t <- fread("t data1
1   10x
1   10y
2    1x
2    1y
3    2x
3    2y")

#create part1 and part2, using the position where numeric goes to character als splitpoint
dt[, c("part1", "part2") := tstrsplit( dt$data1, "(?<=[0-9])(?=[A-Za-z])", perl = TRUE )][]

#    t data1 part1 part2
# 1: 1   10x    10     x
# 2: 1   10y    10     y
# 3: 2    1x     1     x
# 4: 2    1y     1     y
# 5: 3    2x     2     x
# 6: 3    2y     2     y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...