我有这样的数据。
> head(new3)
Date Hour Dayahead Actual Difference
1 2015-01-01 0:00 42955 42425 530
2 2015-01-01 0:15 42412 42021 391
3 2015-01-01 0:30 41901 42068 -167
4 2015-01-01 0:45 41355 41874 -519
5 2015-01-01 1:00 40710 41230 -520
6 2015-01-01 1:15 40204 40810 -606
他们的特征如下:
> str(new3)
'data.frame': 35044 obs. of 5 variables:
$ Date : Date, format: "2015-01-01" "2015-01-01" "2015-01-01" "2015-
01-01" ...
$ Hour : chr "0:00" "0:15" "0:30" "0:45" ...
$ Dayahead : chr "42955" "42412" "41901" "41355" ...
$ Actual : int 42425 42021 42068 41874 41230 40810 40461 40160 39958
39671 ...
$ Difference: chr "530" "391" "-167" "-519" ...
我尝试通过执行as.numeric
将Hour和Dayahead更改为数字。但它告诉我这个。
> new3$Dayahead<-as.numeric(new3$Dayahead)
Warning message:
NAs introduced by coercion
> new3$Hour<-as.numeric(new3$Hour)
Warning message:
NAs introduced by coercion
所以当我再次与str
核对时,它向我展示了这一点。
> str(new3)
'data.frame': 35044 obs. of 5 variables:
$ Date : Date, format: "2015-01-01" "2015-01-01" "2015-01-01" "2015-
01-01" ...
$ Hour : num NA NA NA NA NA NA NA NA NA NA ...
$ Dayahead : num 42955 42412 41901 41355 40710 ...
$ Actual : int 42425 42021 42068 41874 41230 40810 40461 40160 39958
39671 ...
$ Difference: chr "530" "391" "-167" "-519" ...
问题是, 1)为什么我会通过强制'警告信息引入'NAs?
2)我如何解决上述问题?
3)为什么我得到小时的NA数据,我该如何解决呢?
谢谢。
答案 0 :(得分:2)
试试这个:
hour <- c("0:00", "0:15", "0:30", "0:45", "1:00", "1:15")
替换:
每.
你可以转换
hour <- gsub(":", ".", hour)
hour <- as.numeric(hour)
hour
[1] 0.00 0.15 0.30 0.45 1.00 1.15
答案 1 :(得分:2)
正如评论中已经提到的,如果您的字符串包含非数字字符(即&#34;:&#34;在您的小时列中),则无法将其转换为数字,这就是为什么你得到NA。
我不确定您为什么要将时间转换为数字,但如果您想对其执行某些操作(例如,计算时差),则应将日期转换为Posix格式。在您的情况下运行:
new3$fulldate <- as.POSIXlt(paste(new3$Date, new3$Hour, sep = " "))