转换字符

时间:2018-02-04 10:28:01

标签: r character numeric

我有这样的数据。

> 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数据,我该如何解决呢?

谢谢。

2 个答案:

答案 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 = " "))