我想问一下是否有效处理这些事情。
(1)有效加载数据
由于文件名与我想在环境中分配的名称不同,我做了72次。
P02 <- read.csv("P02_1.csv")
P03 <- read.csv("P03_1.csv")
P04 <- read.csv("P04_1.csv")
P06 <- read.csv("P06_1.csv")
P11 <- read.csv("P11_1.csv")
P12 <- read.csv("P12_1.csv")
P13 <- read.csv("P13_1.csv")
P14 <- read.csv("P14_1.csv")
P15 <- read.csv("P15_1.csv")
......但是认为有很多参与者......
(2)有效地改变时间格式
要更改时间格式,我尝试了类似的方法。
P02$Time <- as.POSIXct(P02$Time, format = "%Y-%m-%d %H:%M:%S")
P03$Time <- as.POSIXct(P03$Time, format = "%Y-%m-%d %H:%M:%S")
P04$Time <- as.POSIXct(P04$Time, format = "%Y-%m-%d %H:%M:%S")
P06$Time <- as.POSIXct(P06$Time, format = "%Y-%m-%d %H:%M:%S")
P11$Time <- as.POSIXct(P11$Time, format = "%Y-%m-%d %H:%M:%S")
P12$Time <- as.POSIXct(P12$Time, format = "%Y-%m-%d %H:%M:%S")
P13$Time <- as.POSIXct(P13$Time, format = "%Y-%m-%d %H:%M:%S")
P14$Time <- as.POSIXct(P14$Time, format = "%Y-%m-%d %H:%M:%S")
P15$Time <- as.POSIXct(P15$Time, format = "%Y-%m-%d %H:%M:%S")
......再次,72次。
有没有办法有效地完成所有这些事情? 有心思使用“for loop”和“assign”功能,但不知道如何使用。
答案 0 :(得分:2)
您可以使用for
循环和assign
函数执行此操作,但我认为更优雅的解决方案是将数据框存储在列表中。假设所有csv文件都在同一目录中,您可以遍历输入文件,读取它们,转换并将结果保存到列表中。这是一个例子:
directory <- "/path/to/your/data"
files <- list.files(directory)
data_frames <- vector("list", length(files))
for (i in seq_along(files)) {
df <- read.csv(file.path(directory, files[i]))
df$Time <- as.POSIXct(df$Time, format = "%Y-%m-%d %H:%M:%S")
data_frames[[i]] <- df
}
答案 1 :(得分:2)
如果要读入工作目录中的所有csv文件,可以使用list.files
获取其名称,然后一次性读取它们。这将创建一个数据框列表,这比在工作区周围有72个对象要好得多。
filenames <- list.files(pattern = "csv")
P_list <- lapply(filenames, read.csv)
names(P_list) <- sub("(^P[[:digit:]]{2}).*", "\\1", x)
现在,您可以再次使用lapply
进行所需的转换。
P_list <- lapply(P_list, function(x){
x$Time <- as.POSIXct(x$Time, format = "%Y-%m-%d %H:%M:%S")
x
})
(未经测试,因为没有真实的数据。)