R as.POSIXct尝试两种输入格式

R as.POSIXct尝试两种输入格式,r,date,format,R,Date,Format,我正在读一个.csv的日期和gps位置。我需要将date列转换为date类。 我正在使用: data = data.frame(rbind(c('2016/07/19 17:52:00',3674.64416424279,354.266660979476), c('2016/07/19 17:54:00',3674.65121597935,354.246972537617), c('2016/07/19 17:55:00',3674.65474186293,

我正在读一个.csv的日期和gps位置。我需要将date列转换为date类。 我正在使用:

data = data.frame(rbind(c('2016/07/19 17:52:00',3674.64416424279,354.266660979476), 
         c('2016/07/19 17:54:00',3674.65121597935,354.246972537617),
         c('2016/07/19 17:55:00',3674.65474186293,354.237128326737),
         c('2016/07/19 17:56:00',3674.65826775671,354.227284122559)))
colnames(data) = (c('GMT_DateTime','northing','easting'))

data$GMT_DateTime<-as.POSIXct(data$GMT_DateTime, tz="GMT", format = "%Y/%m/%d %H:%M:%S")

谢谢大家!

在下面的内容中,我将使用包
lubridate

我在示例数据集中添加了两行额外的数据,日期/时间值为
%m/%d/%Y%H:%m”
格式。请注意,该列属于类
字符
,如果属于类
因子
,则可能会抛出错误。
至于警告,别担心,它们只是告诉您它发现了几种格式,无法一次性处理所有格式

tmp <- data$GMT_DateTime    # work on a copy

na <- is.na(ymd_hms(tmp))
data$GMT_DateTime[!na] <- ymd_hms(tmp)[!na]
data$GMT_DateTime[na] <- mdy_hm(tmp)[na]
data$GMT_DateTime <- as.POSIXct(as.numeric(data$GMT_DateTime),  
                                format = "%Y-%m-%d",  
                                origin = "1970-01-01", tz = "GMT")

rm(tmp)    # final clean up

tmp创建这样的数据集是一个非常非常糟糕的主意。查看每个向量的情况:
c('2016/07/19 17:52:00',3674.64416424279354.266660979476)
将字符串与数字混合,使它们成为字符串。然后函数
data.frame
默认值为
stringsAsFactors=TRUE
,这是R中最危险的默认值之一。查看为什么要签出
str(data)
。你所有的变量都是类
因子
。嗨,鲁伊,谢谢你的投入和资源。我只是想创建一个小的示例数据集,为我的问题提供上下文。实际上,我是在用read.csv()读取另一个程序中创建的.csv,因此我的数值是以数字形式读取的。
anytime
和/或
lubridate
包可能能够处理任意输入
tmp <- data$GMT_DateTime    # work on a copy

na <- is.na(ymd_hms(tmp))
data$GMT_DateTime[!na] <- ymd_hms(tmp)[!na]
data$GMT_DateTime[na] <- mdy_hm(tmp)[na]
data$GMT_DateTime <- as.POSIXct(as.numeric(data$GMT_DateTime),  
                                format = "%Y-%m-%d",  
                                origin = "1970-01-01", tz = "GMT")

rm(tmp)    # final clean up
data <-
structure(list(GMT_DateTime = c("2016/07/19 17:52:00", "2016/07/19 17:54:00", 
"2016/07/19 17:55:00", "2016/07/19 17:56:00", "07/22/2016 17:02", 
"07/23/2016 17:15"), northing = c(3674.64416424279, 3674.65121597935, 
3674.65474186293, 3674.65826775671, 3674.662, 3674.665), easting = c(354.266660979476, 
354.246972537617, 354.237128326737, 354.227284122559, 354.2702, 
354.3123)), row.names = c(NA, -6L), class = "data.frame")