2013-02-08 121 views
3

一列我有一個簡單數據幀。從中我想添加另一列記錄時間(小時和分鐘,在24小時制)。然後,我將把這個列映射到一個變量上。由於日期完全相同,我只對時間感興趣。這是我到目前爲止所嘗試的。小時和分鐘在中的R

a <- c(1:6) 
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10", 
     "05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04") 
c <-c("0","0","0","1","1","1") 
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE) 

a <- df1$a 
b <- strptime(df1$b, "%d/%m/%Y %H:%M") 
c <- as.numeric(df1$c) 
hour <- as.numeric(format(b, "%H")) 
min <- as.numeric(format(b, "%M")) 
date <- format(b, "%x") 
time <- hour + min 

df2 <- data.frame(a, b, c, hour, min, date, time) 

我被告知here手動通過打破號碼分開,轉換成類似單元,然後加入到分鐘和小時進行轉換。不過我奮力5點簡單地被導入爲5

如果有人可以告訴我怎麼可能正確地做到這一點,我將非常感激。

+1

原諒我,如果我是密集的,但是應該輸入什麼5,好像它不是5?也許你想把你的小時數乘以60或者將分鐘乘以60?或者只是繪製日期,以便您不必處理! – Justin 2013-02-08 15:01:41

+0

非常感謝@Justin。我希望第一次是05:00或0500,無論哪個都是簡單計算。 – 2013-02-08 15:06:21

+0

您應該使用'paste(小時,分鐘,sep =':')'而不是'+'。你只需要添加兩個不知道時間的數字。但是,我會建議使用時間戳數據類型('?as.POSIXct')來避免所有這些潛在的混淆。 – Justin 2013-02-08 15:07:37

回答

4

有日期和時間的多次轉換工具,以及一整套包使用。在這種情況下,我喜歡與POSIXlt一起工作,因爲只需從列表中提取它們即可提取所需的任何信息。

如:

a <- c(1:6) 
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10", 
     "05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04") 
c <-c("0","0","0","1","1","1") 
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE) 

df2 <- within(df1,{ 
    posb <- as.POSIXlt(b,format="%d/%m/%Y %H:%M") 
    hours <- posb$hour 
    mins <- posb$min 
    dates <- format(posb, "%x") 
    time <- format(posb, "%H:%M") 
    posb <- NULL # cleanup 
}) 

其中給出:

> df2 
    a    b c time  dates mins hours 
1 1 05/12/2012 05:00 0 05:00 12/5/2012 0  5 
2 2 05/12/2012 06:55 0 06:55 12/5/2012 55  6 
3 3 05/12/2012 07:10 0 07:10 12/5/2012 10  7 
4 4 05/12/2012 10:23 1 10:23 12/5/2012 23 10 
5 5 05/12/2012 11:43 1 11:43 12/5/2012 43 11 
6 6 05/12/2012 13:04 1 13:04 12/5/2012 4 13 

欲瞭解更多信息,參見:

  • ?POSIXlt更多的信息在POSIXt類
  • ?format更多有關格式化opti的信息附件
  • ?strptime對格式選項還更多信息,並轉換爲字符
  • lubridate package替代功能
  • timeDate package更多的替代功能
  • ...
+1

這是完美的 - 萬分感謝@Joris Meys – 2013-02-08 15:16:16

+0

在一個旁註,你可能想了解使用'within'功能爲您的代碼可讀性的。非常強大的東西。 – 2013-02-08 15:18:20