Разделение одного столбца на 3 столбца с сохранением исходного столбца (R) - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть уникальный символьный столбец, который находится в «DD HH: MM». Я пытаюсь разделить столбец на 3 новых цифр c столбцов. Моя проблема с отдельной функцией заключается в том, что она заменяет исходный столбец, и я не могу понять, как пройти несколько критериев через SEP =

Sample of an observation in

Обратите внимание, что не каждое наблюдение имеет «DD»

Мой текущий код выглядит следующим образом:

separate(numeric_report,Planned.Duration..dd.hh.mm., into = c("Planned Days" ,"Planned Hours" , "Planned Minutes"),sep = ":")

Любой совет будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Мы можем использовать separate

library(dplyr)
library(tidyr)
data %>% 
    separate( Planned.Duration..dd.hh.mm., 
             into = c("Planned Days" ,"Planned Hours" , "Planned Minutes"), 
             sep = "[: ]+", remove = FALSE, fill = "left", convert = TRUE)

#  Planned.Duration..dd.hh.mm. Planned Days Planned Hours Planned Minutes
#1                        1:03           NA             1               3
#2                     2 00:38            2             0              38
#3                        0:49           NA             0              49

Мы также можем использовать extract

data %>% 
    tidyr::extract(Planned.Duration..dd.hh.mm., 
       into = c("Planned Days" ,"Planned Hours" , "Planned Minutes"), 
            "^(\\d+)? ?(\\d+):(\\d+)$", remove = FALSE, convert = TRUE)

#   Planned.Duration..dd.hh.mm. Planned Days Planned Hours Planned Minutes
#1                        1:03           NA             1               3
#2                     2 00:38            2             0              38
#3                        0:49           NA             0              49

данные

data <- data.frame(Planned.Duration..dd.hh.mm. = 
         c('1:03', '2 00:38','0:49'), stringsAsFactors = FALSE)
1 голос
/ 24 апреля 2020

Вы можете использовать remove = FALSE, чтобы остановить отбрасывание исходных столбцов, и вы можете использовать аргумент pass множественный sep, используя |.

tidyr::separate(data, Planned.Duration..dd.hh.mm., 
                 into = c("Planned Days" ,"Planned Hours" , "Planned Minutes"), 
                 sep = ":|\\s", remove = FALSE, fill = "left", convert = TRUE)


#      Planned.Duration..dd.hh.mm. Planned Days Planned Hours Planned Minutes
#1                        1:03           NA             1               3
#2                     2 00:38            2             0              38
#3                        0:49           NA             0              49

данные

data <- data.frame(Planned.Duration..dd.hh.mm. = 
         c('1:03', '2 00:38','0:49'), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...