R中的重复错误

KT_*_*T_1 5 timezone r posixct lubridate

我使用以下代码给我一个日期的星期几(格式为dd/mm/yyyy).

编辑:我上传了一个更重要的数据集.

df <- structure(list(Date = c("18/01/2013", "18/01/2013", "18/01/2013", 
                    "18/01/2013", "18/01/2013"), Time = c("07:25:30", "07:25:40", 
                                                          "07:25:50", "07:26:00", "07:26:10"), Axis1 = c(217L, 320L, 821L, 
                                                                                                         18L, 40L), Steps = c(6L, 7L, 5L, 1L, 1L), wday = c(7, 7, 7, 7, 7)), .Names = c("Date", "Time", "Axis1", "Steps", "wday"), row.names = 18154:18158, class = "data.frame")


library(lubridate)
df$wday = wday(df$Date)
df$wday.name = wday(df$Date, label = TRUE, abbr = TRUE)
Run Code Online (Sandbox Code Playgroud)

据R报道,18/1是星期五,而不是星期六.

有没有人有任何建议如何纠正这个?

编辑:我试图遵循Dirk给出的建议......

as.POSIXlt(df[,1])$wday
Run Code Online (Sandbox Code Playgroud)

......但这仍然暗示18/1是星期六.

我的时区是GMT/UTC(英国夏令时+ 1),但是因为我只想让R从日期栏中读取(只是d/m/y),我认为我不需要指定它. .

如何将正确的wday列添加到现有的R数据帧中?(如我原来的脚本中所述).我正在努力让建议的编码工作,因为我以错误的格式给出了数据帧 - 道歉.

Dir*_*tel 6

您可以使用基本R功能.使用你的df对象:

 R> as.POSIXlt(df[,1])$wday  
 [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
 R> weekdays(as.Date(df[,1])) 
  [1] "Friday"   "Friday"   "Friday"   "Friday"   "Friday"
  [6] "Friday"   "Friday"   "Friday"   "Friday"   "Friday" 
 [11] "Friday"   "Friday"   "Friday"   "Friday"   "Saturday"  
 [16] "Saturday" "Saturday" "Saturday" "Saturday" 
 R>     
Run Code Online (Sandbox Code Playgroud)

由于未指定TZ,因此在周六有溢出效应.

如果你这样做

 R> df <- data.frame(Date=seq(as.POSIXct("05:00", format="%H:%M", tz="UTC"),
 +                  as.POSIXct("23:00", format="%H:%M", tz="UTC"), by="hours"))
Run Code Online (Sandbox Code Playgroud)

然后

 R> table(weekdays(as.Date(df[,1], TZ="UTC")))

 Friday
    19
 R> 
Run Code Online (Sandbox Code Playgroud)

我认为星期五/星期六的错误也可能在lubridate下消失,但我倾向于使用基本R函数.

编辑:确认.

R> lubridate::wday(as.Date(df[,1]), label=TRUE) 
 [1] Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri 
[15] Fri Fri Fri Fri Fri          
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat  
R>
Run Code Online (Sandbox Code Playgroud)