2015-06-21 82 views
0

我有許多.csv文件,它們都包含放在同一個目錄中的相同字段,但每個文件中的值都是針對特定日期的。但是,.csv文件中的數據不包含日期 - 只有文件名包含日期。根據R中的文件名創建一個新字段

我目前閱讀和使用下面的代碼合併不同的.csv文件:

group <- list.files(pattern="[.]csv") 
fun <- function(x) { 
    df <- read.csv(x , header = TRUE) 
} 
big_df <- ldply(group, fun) 

的輸出,那麼看起來是這樣的:

print(big_df) 
    value_a value_b value_c 
1  1  444  10 
2  5 7364  9 
3  32  573  14 
4  7  253  16 

和文件,這是閱讀從這樣的樣子:

print(group) 
[1] "PSM_filter_report_04242015_1.csv" "PSM_filter_report_04242015_2.csv" "PSM_filter_report_04252015_1.csv" 
[4] "PSM_filter_report_04272015_1.csv" 

我想作爲一部分的過程s是使用substr(),或者一些可比較的函數,將文件名中的日期添加爲我創建的文件中的新字段。這樣一來,新的數據幀是這樣的:

big_df 
    value_a value_b value_c  date 
1  1  444  10 04242015 
2  5 7364  9 04242015 
3  32  573  14 04252015 
4  7  253  16 04272015 

只要日期被讀入作爲一個因素或字符(讓我不會失去前導零),我會使用as.Date()方便地轉換日期。

回答

1

這將是獲得你想要的方式之一。由於您有系統的方式來表示時間信息(即日期信息有八位數字),您可以做這樣的事情。

library(stringr) 

group <- c("PSM_filter_report_04242015_1.csv","PSM_filter_report_04242015_2.csv", 
      "PSM_filter_report_04252015_1.csv", "PSM_filter_report_04272015_1.csv") 

str_extract(group, "[0-9]{8}") 

# [1] "04242015" "04242015" "04252015" "04272015" 

然後,您可以稍後將此字符串轉換爲日期。希望這可以幫助你。

0

您可以在基本R中執行相同的操作,而無需使用外部庫。由於日期長度爲8,格式爲'%m%d%Y',所以下面的代碼會很好。

# assuming only csv files are of interest 
group <- list.files(path = '.', pattern=".csv$") 
dates <- substr(group, regexpr('\\d', group), regexpr('\\d', group)+8-1) 
dates <- strptime(dates, '%m%d%Y') 
dates <- as.POSIXct(dates) #if you need POSIXct objects 

您可以通過直接從和位置更換regexpr通話,即from=19, to=26

HTH

相關問題