2017-09-16 57 views
0

我想问问是否有任何有效的工作来处理这些事情。阅读多个csv文件和更新列

(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循环”和“分配”功能,但不知道如何。

+0

你想在该目录中的所有CSV文件中读? –

回答

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 
} 
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 
}) 

(未经测试,因为没有真实的数据。)

+0

你应该在'list.files'中添加'path/to/files' – CPak

+0

@CPak我想到了,但OP从当前目录读取。默认是'path =“。”'。鉴于OP的代码,没有理由改变这一点。 –

+0

ok CPak