从 R 中的数据帧中提取时间信息
Extracting the time information from a dataframe in R
我在 R 中有一个时间图数据框,其中的日期完全是乱码。我正在寻找提取时间信息并替换正确的日期。但我 运行 遇到了一些问题。我已经展示了数据框的一部分 (Time_df)
Time_df =
Time1 Time2 Time3 Time4 Time5
102 1970-01-01 07:00:00 1970-01-01 19:00:00 1970-01-01 1970-01-01 1970-01-01
103 1970-01-01 00:00:00 1970-01-02 00:00:00 1970-01-01 1970-01-01 1970-01-01
104 1970-01-01 00:00:00 1970-01-02 00:00:00 1970-01-01 1970-01-01 1970-01-01
105 1970-01-01 06:00:00 1970-01-01 22:00:00 1970-01-01 1970-01-01 1970-01-01
106 1970-01-01 08:00:00 1970-01-01 21:00:00 1970-01-01 1970-01-01 1970-01-01
dput(Time_df) =
structure(list(Time1 = structure(c(43200, 18000, 18000, 39600,
46800), class = c("POSIXct", "POSIXt"), tzone = ""), Time2 = structure(c(86400,
104400, 104400, 97200, 93600), class = c("POSIXct", "POSIXt"), tzone = ""),
Time3 = structure(c(18000, 18000, 18000, 18000, 18000), class = c("POSIXct",
"POSIXt"), tzone = ""), Time4 = structure(c(18000, 18000,
18000, 18000, 18000), class = c("POSIXct", "POSIXt"), tzone = ""),
Time5 = structure(c(18000, 18000, 18000, 18000, 18000), class = c("POSIXct",
"POSIXt"), tzone = "")), .Names = c("Time1", "Time2", "Time3",
"Time4", "Time5"), row.names = 102:106, class = "data.frame")
如果我查看结构,它都是 POSIXct 格式
str(Time_df)
'data.frame': 5 obs. of 5 variables:
$ Time1: POSIXct, format: "1970-01-01 07:00:00" "1970-01-01 00:00:00" "1970-01-01 00:00:00" ...
$ Time2: POSIXct, format: "1970-01-01 19:00:00" "1970-01-02 00:00:00" "1970-01-02 00:00:00" ...
$ Time3: POSIXct, format: "1970-01-01" "1970-01-01" "1970-01-01" ...
$ Time4: POSIXct, format: "1970-01-01" "1970-01-01" "1970-01-01" ...
$ Time5: POSIXct, format: "1970-01-01" "1970-01-01" "1970-01-01" ...
但是当我试图提取时间时,它给我一个错误
times = strftime(Time_df, format="%H:%M:%S")
Error in as.POSIXlt.default(x, tz = tz) :
do not know how to convert 'x' to class “POSIXlt”
我可以为单个列提取时间,但不能为整个数据帧提取时间。我确实有 42 列,所以我希望有一种更简洁的方法。这就是我想要的:
Mon = rep("03/20/17", 6)
Tue = rep("03/21/17", 6)
Wed = rep("03/22/17", 6)
Thu = rep("03/23/17", 6)
Fri = rep("03/24/17", 6)
Sat = rep("03/25/17", 6)
Sun = rep("03/26/17", 6)
dates = c(Mon, Tue, Wed, Thu, Fri, Sat, Sun)
t = strftime(Time_df, format="%H:%M:%S")
x = paste(dates, t)
您必须按第 (2) 列使用 apply
:
apply(Time_df,2,strftime, format="%H:%M:%S")
Time1 Time2 Time3 Time4 Time5
[1,] "07:00:00" "19:00:00" "00:00:00" "00:00:00" "00:00:00"
[2,] "00:00:00" "00:00:00" "00:00:00" "00:00:00" "00:00:00"
[3,] "00:00:00" "00:00:00" "00:00:00" "00:00:00" "00:00:00"
[4,] "06:00:00" "22:00:00" "00:00:00" "00:00:00" "00:00:00"
[5,] "08:00:00" "21:00:00" "00:00:00" "00:00:00" "00:00:00"
我在 R 中有一个时间图数据框,其中的日期完全是乱码。我正在寻找提取时间信息并替换正确的日期。但我 运行 遇到了一些问题。我已经展示了数据框的一部分 (Time_df)
Time_df =
Time1 Time2 Time3 Time4 Time5
102 1970-01-01 07:00:00 1970-01-01 19:00:00 1970-01-01 1970-01-01 1970-01-01
103 1970-01-01 00:00:00 1970-01-02 00:00:00 1970-01-01 1970-01-01 1970-01-01
104 1970-01-01 00:00:00 1970-01-02 00:00:00 1970-01-01 1970-01-01 1970-01-01
105 1970-01-01 06:00:00 1970-01-01 22:00:00 1970-01-01 1970-01-01 1970-01-01
106 1970-01-01 08:00:00 1970-01-01 21:00:00 1970-01-01 1970-01-01 1970-01-01
dput(Time_df) =
structure(list(Time1 = structure(c(43200, 18000, 18000, 39600,
46800), class = c("POSIXct", "POSIXt"), tzone = ""), Time2 = structure(c(86400,
104400, 104400, 97200, 93600), class = c("POSIXct", "POSIXt"), tzone = ""),
Time3 = structure(c(18000, 18000, 18000, 18000, 18000), class = c("POSIXct",
"POSIXt"), tzone = ""), Time4 = structure(c(18000, 18000,
18000, 18000, 18000), class = c("POSIXct", "POSIXt"), tzone = ""),
Time5 = structure(c(18000, 18000, 18000, 18000, 18000), class = c("POSIXct",
"POSIXt"), tzone = "")), .Names = c("Time1", "Time2", "Time3",
"Time4", "Time5"), row.names = 102:106, class = "data.frame")
如果我查看结构,它都是 POSIXct 格式
str(Time_df)
'data.frame': 5 obs. of 5 variables:
$ Time1: POSIXct, format: "1970-01-01 07:00:00" "1970-01-01 00:00:00" "1970-01-01 00:00:00" ...
$ Time2: POSIXct, format: "1970-01-01 19:00:00" "1970-01-02 00:00:00" "1970-01-02 00:00:00" ...
$ Time3: POSIXct, format: "1970-01-01" "1970-01-01" "1970-01-01" ...
$ Time4: POSIXct, format: "1970-01-01" "1970-01-01" "1970-01-01" ...
$ Time5: POSIXct, format: "1970-01-01" "1970-01-01" "1970-01-01" ...
但是当我试图提取时间时,它给我一个错误
times = strftime(Time_df, format="%H:%M:%S")
Error in as.POSIXlt.default(x, tz = tz) :
do not know how to convert 'x' to class “POSIXlt”
我可以为单个列提取时间,但不能为整个数据帧提取时间。我确实有 42 列,所以我希望有一种更简洁的方法。这就是我想要的:
Mon = rep("03/20/17", 6)
Tue = rep("03/21/17", 6)
Wed = rep("03/22/17", 6)
Thu = rep("03/23/17", 6)
Fri = rep("03/24/17", 6)
Sat = rep("03/25/17", 6)
Sun = rep("03/26/17", 6)
dates = c(Mon, Tue, Wed, Thu, Fri, Sat, Sun)
t = strftime(Time_df, format="%H:%M:%S")
x = paste(dates, t)
您必须按第 (2) 列使用 apply
:
apply(Time_df,2,strftime, format="%H:%M:%S")
Time1 Time2 Time3 Time4 Time5
[1,] "07:00:00" "19:00:00" "00:00:00" "00:00:00" "00:00:00"
[2,] "00:00:00" "00:00:00" "00:00:00" "00:00:00" "00:00:00"
[3,] "00:00:00" "00:00:00" "00:00:00" "00:00:00" "00:00:00"
[4,] "06:00:00" "22:00:00" "00:00:00" "00:00:00" "00:00:00"
[5,] "08:00:00" "21:00:00" "00:00:00" "00:00:00" "00:00:00"