簡體   English   中英

R中的日期格式轉換

[英]Date format conversion in R

我正在使用語法

df$new_column_name <- format(as.Date(df$original_column_name, format = "%d/%m/%Y"),"%m/%d/%Y")

轉換 dataframe 中名為 Dailyactivity_Records 的列的日期格式。 ActvityDate列的原始日期格式是 chr 格式的 mm/dd/YYYY。 在控制台中可以看到。

> dailyactivity_Records <- read.csv("dailyActivity_calories_intensities_steps.csv")
> str(dailyactivity_Records)
'data.frame':   940 obs. of  15 variables:
 $ Id                      : num  1.5e+09 1.5e+09 1.5e+09 1.5e+09 1.5e+09 ...
 $ ActivityDate            : chr  "04/12/2016" "4/13/2016" "4/14/2016" "4/15/2016" ...
 $ TotalSteps              : int  13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
 $ TotalDistance           : num  8.5 6.97 6.74 6.28 8.16 6.48 8.59 9.88 6.68 6.34 ...
 $ TrackerDistance         : num  8.5 6.97 6.74 6.28 8.16 6.48 8.59 9.88 6.68 6.34 ...
 $ LoggedActivitiesDistance: num  0 0 0 0 0 0 0 0 0 0 ...
 $ VeryActiveDistance      : num  1.88 1.57 2.44 2.14 2.71 3.19 3.25 3.53 1.96 1.34 ...
 $ ModeratelyActiveDistance: num  0.55 0.69 0.4 1.26 0.41 0.78 0.64 1.32 0.48 0.35 ...
 $ LightActiveDistance     : num  6.06 4.71 3.91 2.83 5.04 2.51 4.71 5.03 4.24 4.65 ...
 $ SedentaryActiveDistance : num  0 0 0 0 0 0 0 0 0 0 ...
 $ VeryActiveMinutes       : int  25 21 30 29 36 38 42 50 28 19 ...
 $ FairlyActiveMinutes     : int  13 19 11 34 10 20 16 31 12 8 ...
 $ LightlyActiveMinutes    : int  328 217 181 209 221 164 233 264 205 211 ...
 $ SedentaryMinutes        : int  728 776 1218 726 773 539 1149 775 818 838 ...
 $ Calories                : int  1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...

最后一行代碼中指定的 ActvityDate 列所需的轉換日期格式為“%d/%m”,其中轉換日期格式為 %Y/%m/%d(我認為這是 date 的默認日期格式在R)。 有人可以澄清為什么嗎?

請看下面的控制台:

> ## converting column ID to character and ACtivityDate to date format
> dailyactivity_Records$Id <- as.character(dailyactivity_Records$Id)
> dailyactivity_Records$Date_ddmm = as.Date(dailyactivity_Records$ActivityDate, format = "%m/%d/%Y", "%d/%m")
> str(dailyactivity_Records)

'data.frame':   940 obs. of  16 variables:
 $ Id                      : chr  "1503960366" "1503960366" "1503960366" "1503960366" ...
 $ ActivityDate            : chr  "04/12/2016" "4/13/2016" "4/14/2016" "4/15/2016" ...
 $ TotalSteps              : int  13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
 $ TotalDistance           : num  8.5 6.97 6.74 6.28 8.16 6.48 8.59 9.88 6.68 6.34 ...
 $ TrackerDistance         : num  8.5 6.97 6.74 6.28 8.16 6.48 8.59 9.88 6.68 6.34 ...
 $ LoggedActivitiesDistance: num  0 0 0 0 0 0 0 0 0 0 ...
 $ VeryActiveDistance      : num  1.88 1.57 2.44 2.14 2.71 3.19 3.25 3.53 1.96 1.34 ...
 $ ModeratelyActiveDistance: num  0.55 0.69 0.4 1.26 0.41 0.78 0.64 1.32 0.48 0.35 ...
 $ LightActiveDistance     : num  6.06 4.71 3.91 2.83 5.04 2.51 4.71 5.03 4.24 4.65 ...
 $ SedentaryActiveDistance : num  0 0 0 0 0 0 0 0 0 0 ...
 $ VeryActiveMinutes       : int  25 21 30 29 36 38 42 50 28 19 ...
 $ FairlyActiveMinutes     : int  13 19 11 34 10 20 16 31 12 8 ...
 $ LightlyActiveMinutes    : int  328 217 181 209 221 164 233 264 205 211 ...
 $ SedentaryMinutes        : int  728 776 1218 726 773 539 1149 775 818 838 ...
 $ Calories                : int  1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
 $ Date_ddmm               : Date, format: "2016-04-12" "2016-04-13" "2016-04-14" "2016-04-15" ...

首先,如果您閱讀?as.Date (強烈建議),您會看到您的第三個參數(未命名)被解釋為tryFormats = "%d/%m" 然而,由於

tryFormats: 'character' vector of 'format' strings to try if 'format'
          is not specified.

並且您確實包含formats= ,那么它什么都不做。

其次,您嘗試做的事情應該分兩步完成:首先轉換為Date ,然后根據需要將其從類似數字的 object 轉換為字符串。 從這里開始,順便說一句,你的日期不再是日期,它們將不再是你可以進行日期數學運算的東西(例如,加/減/差)。

vec <- c("04/12/2016", "4/13/2016", "4/14/2016", "4/15/2016")
as.Date(vec, format = "%m/%d/%Y")
# [1] "2016-04-12" "2016-04-13" "2016-04-14" "2016-04-15"
as.Date(vec, format = "%m/%d/%Y") + 5
# [1] "2016-04-17" "2016-04-18" "2016-04-19" "2016-04-20"
format(as.Date(vec, format = "%m/%d/%Y"), "%d/%m")
# [1] "12/04" "13/04" "14/04" "15/04"
format(as.Date(vec, format = "%m/%d/%Y"), "%d/%m") + 5
# Error in format(as.Date(vec, format = "%m/%d/%Y"), "%d/%m") + 5 : 
#   non-numeric argument to binary operator

如果您需要對其進行類似數字的操作(包括范圍),則必須將其保留為Date 如果是這種情況,我建議您考慮將其作為所有處理的日期,然后僅當您呈現數據以進行可視化(繪圖、表格等)時,然后才需要字符串%d/%m的表示。 除了“真實” Date object 之外,您還可以將其添加為另一列,也許

dailyactivity_Records$ActivityDate <- as.Date(dailyactivity_Records$ActivityDate, format = "%m/%d/%Y")
dailyactivity_Records$Date_ddmm <- format(dailyactivity_Records$ActivityDate , "%d/%m")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM