这是我目前使用的代码,用于将as.POSIXct
应用于多个文件的date_time
列。如果我能在循环中做到这一点,那将使我的生活更轻松。没有为任何文件格式化日期和时间,因此我要做的第一步是格式化date_time
列,然后对每个文件执行其他计算。
这是我到目前为止使用的代码。
> set(wd)
> files <- list.files(pattern="*.csv")
> for(i in 1:length(files)) {
assign(sprintf("a.%02d", i), read.csv(files[i], header=T))
}
> a.01[,1] <- as.POSIXct(a.01[,1], format="%m/%d/%Y %H:%S")
> a.02[,1] <- as.POSIXct(a.02[,1], format="%m/%d/%Y %H:%S")
> a.03[,1] <- as.POSIXct(a.03[,1], format="%m/%d/%Y %H:%S")
> a.04[,1] <- as.POSIXct(a.04[,1], format="%m/%d/%Y %H:%S")
> a.05[,1] <- as.POSIXct(a.05[,1], format="%m/%d/%Y %H:%S")
> a.06[,1] <- as.POSIXct(a.06[,1], format="%m/%d/%Y %H:%S")
............................................................
and so on.
我的示例数据看起来像这样。每个文件包含超过3000行和多列。以下结构仅显示其中一个文件的前10行,所有其他文件的格式相同。
> dput(head(a.01, n=10))
structure(list(date_time = structure(c(-61759604476, -61759593676,
-61759582876, -61759572076, -61759561276, -61759550476, -61759539676,
-61759528876, -61759518076, -61759507276), class = c("POSIXct",
"POSIXt"), tzone = ""), V1 = c(1002, 1002, 1002,
1001, 1000, 1001, 1001, 1002, 1003, 1004), V2 = c(2.228,
0.7123, 2.67, 4.378, 4.102, 3.782, 1.669, 1.356, 0.3223, 0.2053
), V3 = c(34.48, 8.455, 247.4, 259.8, 276, 333.7, 289.4,
324, 2.45, 306.9), V4 = c(32.23, 28.6, 31.04, 29.73, 35.24,
41.17, 37.49, 38.7, 40.8, 36.45), V5 = c(17.55,
18.55, 21.75, 23.65, 22.15, 19.65, 19.05, 17.25, 16.45, 17.35
)), .Names = c("Date", "V1", "V2", "V3",
"V4", "V5"), row.names = c(NA, 10L), class = "data.frame")
数据看起来像这样,所有其他文件与未格式化的日期和时间具有相似的模式。
> head(a.01, n=5)
date_time V1 V2 V3 V4 V5
1 12-12-01 00:00:00 1002 2.2280 34.480 32.23 17.55
2 12-12-01 03:00:00 1002 0.7123 8.455 28.60 18.55
3 12-12-01 06:00:00 1002 2.6700 247.400 31.04 21.75
4 12-12-01 09:00:00 1001 4.3780 259.800 29.73 23.65
5 12-12-01 12:00:00 1000 4.1020 276.000 35.24 22.15
欢迎任何建议。先感谢您。
答案 0 :(得分:2)
阅读列表,问题就消失了:
files <- list.files(pattern="*.csv")
a <- lapply(files, function(f) {
x <- read.csv(f)
x[,1] = as.POSIXct(x[,1], format="%m/%d/%Y %H:%S")
x
}
names(a) <- files
答案 1 :(得分:2)
您的日期被错误地阅读。您有"%m/%d/%Y"
作为日期格式字符串,它显然应该是:"%m/%d/%y"
。如果您将文件的顶部发布为文本而不是R代码创建的内容,则可以获得更明确的答案。我将此作为您结构的输出:
Date V1 V2 V3 V4 V3
1 0012-11-30 10:25:46 1002 2.2280 34.480 32.23 17.55
2 0012-11-30 13:25:46 1002 0.7123 8.455 28.60 18.55
所以你的岁月&#39;被解释为自“共同时代”开始以来的12年。