R as.POSIXct尝试两种输入格式
我正在读一个.csv的日期和gps位置。我需要将date列转换为date类。 我正在使用: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,
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")