разделение часов и минут из столбца длительности в R - PullRequest
1 голос
/ 30 марта 2019

В моем наборе данных есть столбец с именем продолжительности. Из него я хочу разделить часы и минуты на 2 отдельные колонки. Если нет часов или минут, добавьте 0h или 0m соответственно.

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

train <- read.csv("sampledata.csv", stringsAsFactors = F)
train$Duration

enter image description here

Edit:

sampledata <- data.frame(
   emp_id = c (1:5), 
   Duration = c("10h 50m","5h 34m","9h","4h 15m","23m"),
   stringsAsFactors = FALSE
)

sampledata$Duration

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Решение с использованием sub () и gsub будет выглядеть так:

# first identify strings with "h"
h_in_str <- grepl("h", sampledata$Duration)
# if string has "h", then return all before "h" or else return 0
sampledata$Hours <- ifelse(h_in_str, sub("h.*", "", sampledata$Duration), 0)

# identify strings with "m"
m_in_str <- grepl("m", sampledata$Duration)
# if string has "m", return all numbers without those preceding "h" or else return 0
sampledata$Minutes <- ifelse(m_in_str, 
gsub("([0-9]+).*$", "\\1", sub(".*h", "", sampledata$Duration)), 0)

Это даст вам данные, которые вы ищете

sampledata
emp_id Duration Hours Minutes
1      1  10h 50m   10      50
2      2   5h 34m    5      34
3      3       9h    9       0
4      4   4h 15m    4      15
5      5      23m    0      23
1 голос
/ 30 марта 2019

Не лучший ответ, я бы сказал, но один из способов был бы

#Get numbers next to hours and minutes
hour_minute <- sub("(\\d+)h (\\d+)m", "\\1-\\2", sampledata$Duration)

sampledata[c("hour", "minutes")] <- t(sapply(strsplit(hour_minute, "-"), 
function(x) {
  if (length(x) == 2) x 
  else if (endsWith(x, "h")) c(sub("h", "", x), 0)
  else c(0, sub("m", "", x))
}))

sampledata
  emp_id Duration hour minutes
1      1  10h 50m   10      50
2      2   5h 34m    5      34
3      3       9h    9       0
4      4   4h 15m    4      15
5      5      23m    0      23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...