Dividere la data

Ho un df con una colonna datetime (DD: MM: yyyy HH: mm: ss) chiamato “Start” e vorrei dividere questa colonna in due di nome “date” e “time”.
Ora ho provato quanto segue:

df$Date <- sapply(strsplit(as.character(df$Start), " "), "[", 1) df$Time <- sapply(strsplit(as.character(df$Start), " "), "[", 2) 

Funziona, tuttavia, se uso la funzione str (df) (l’ho tagliata in modo da poter vedere principalmente le variabili della mia preoccupazione).

‘data.frame’: 18363 obs. di 19 variabili:
$ Inizio: Fattore w / 67 livelli “2013-09-01 08: 07: 41.000”, ..: 1 1 1 1 1 1 1 1 1 1 …
$ Intervallo: int 47259 47259 47259 47259 47259 47259 47259 47259 47259 47259 …
$ DateTime: fattore w / 18363 livelli “2013-09-01 08: 07: 41.350”, ..: 1 2 3 4 5 6 7 8 9 10 …
$ TimeSensor: num 158489 158489 158490 158490 158491 …

Quindi ora ho solo bisogno di sapere come convertire l’ora e la data da “fattori” a “ora” e “data”.

Se qualcuno conosce la soluzione, sarei molto grato! Sono un noob riguardo a R quindi per favore non bruciarmi a terra ..

    Grazie mille!

    Che ne dite di

     df$Date <- as.Date(df$Start) df$Time <- format(df$Start,"%H:%M:%S") 

    Ci scusiamo per questa risposta tardiva! Ad ogni modo, ho ricevuto aiuto da qualcuno all’università e lui mi ha proposto il seguente, molto semplice, adattamento del mio codice temporale ..:

     df$Date <- as.Date(df$Start) #already got this one from the answers above df$Time <- format(as.POSIXct(df$Start) ,format = "%H:%M:%S") 

    Questo converte i fattori in "date" e "POSIXct", proprio come lo volevo.

    Grazie a tutti voi per il vostro aiuto! Spero di poter tornare qualche tipo di favore in futuro, anche se dubito che sarà con la programmazione ..!

    Visualizzando il formato della colonna, direi che è ansible utilizzare as.POSIXct per formattare correttamente la colonna e quindi utilizzare format () per estrarre i dati desiderati.

    Questo è il codice che uso quando dividi una colonna DateTime,

     df$Time <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%H:%M:%S") df$Date <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%Y:%m:%d") 

    Potresti preferire qualcosa di simile, evitando l’uso di un loop lapply che non è realmente necessario (ma non è neanche una brutta cosa!) …

     # If we had this data... df <- data.frame( Start = c( "13:11:2013 15:39" , "13:11:2013 16:15" , "13:11:2013 17:52" ) ) # We can directly make two columns from the split strings without # using a loop by call 'do.call'.. new <- do.call( rbind , strsplit( as.character( df$Start ) , " " ) ) # [,1] [,2] #[1,] "13:11:2013" "15:39" #[2,] "13:11:2013" "16:15" #[3,] "13:11:2013" "17:52" # Cbind them to the original data liek so... cbind( df , Date = new[,2] , Time = new[,1] ) # Start Date Time #1 13:11:2013 15:39 15:39 13:11:2013 #2 13:11:2013 16:15 16:15 13:11:2013 #3 13:11:2013 17:52 17:52 13:11:2013