Как объединить два столбца в один?

Я застрял, объединив два столбца фрейма данных в один. Ниже приведен код для воспроизведения проблемы

df <- data.frame(date = c("2/13/1962 0:00:00", "4/13/1972 0:00:00", "3/13/1982 0:00:00", "12/13/1992 0:00:00"), 
                 time = c("0900", "1000", "1101", "1603"))

#This works
df$tmp <- as.Date(df$date, format="%m/%d/%Y")
df  

                date     time        tmp  
    1  2/13/1962 0:00:00 0900 1962-02-13  
    2  4/13/1972 0:00:00 1000 1972-04-13  
    3  3/13/1982 0:00:00 1101 1982-03-13  
    4 12/13/1992 0:00:00 1603 1992-12-13    


# this doesn't
df$tmp <- strptime(strsplit(as.character(df$date), " ")[[1]][1], format="%m/%d/%Y")
df

    1  2/13/1962 0:00:00 0900 1962-02-13
    2  4/13/1972 0:00:00 1000 1962-02-13
    3  3/13/1982 0:00:00 1101 1962-02-13
    4 12/13/1992 0:00:00 1603 1962-02-13    

Я хотел бы получить столбец, который сочетает в себе часть даты и столбец времени, но не смог получить этот результат.

Экспериментируя, я заметил, что функция as.Date конвертирует дату. С другой стороны, с функцией strsplit все строки заканчиваются первой датой.

Я был бы очень признателен за любую помощь в решении, в результате чего 4 строки имеют объект «Дата»:

    1 1962-02-13 09:00
    2 1972-04-13 10:00
    3 1982-03-13 11:01
    4 1992-12-13 16:03

person chribonn    schedule 18.08.2014    source источник
comment
Как насчет чего-то вроде strptime(paste(df$tmp, df$time), format="%Y-%m-%d %H%M") (не проверено, не на моем компьютере). Может понадобиться as.character(df$tmp) в пасте.   -  person r2evans    schedule 18.08.2014
comment
@Томас: Сработало! Я ввел следующее: df$date3 = strptime(paste(as.Date(df$date, format="%m/%d/%Y"), df$time), format="%Y-%m-%d %H%M")   -  person chribonn    schedule 19.08.2014


Ответы (1)


Вы можете paste указать переменную даты и времени, а затем использовать as.POSIXct с соответствующими format:

as.POSIXct(x = paste(as.Date(df$date, format = "%m/%d/%Y"), df$time),
           format = "%Y-%m-%d %H%M")
person Henrik    schedule 18.08.2014
comment
а затем снова отформатируйте для нужного стиля format(x, format = '%Y-%m-%d %H:%M') - person rawr; 18.08.2014
comment
Я изменил код следующим образом: df$date2 = as.POSIXct(paste(as.Date(df$date, format = "%m/%d/%Y"), df$time), format = "%Y-%m-%d %H%M"). - person chribonn; 19.08.2014