2012-11-26 170 views
1

我有一个数据集列表。每个数据集包含一个月的一些数据。数据跨度很多年,因此我每年有12个数据集。这些数据最初是一堆Excel文件。我有进口的所有文件,以前转换为.csv,以下this advice,即:在数据框列表中动态创建一个新的数据框列

datalist <- list() 
files <- list.files(pattern="\\.csv$") 

for(file in files) { 
    stem <- gsub("\\.csv$","",file) 
    datalist[[stem]] <- read.csv(file) 
} 

所以我结束了一个名为datalist列表包含我的所有数据集。

现在,我的问题是只有文件名包含实际的月份和年份的每个部分的数据被收集,所以我想从每个数据集名称中获取名称和年份,并将它们归入两个新列数据框:“年”和“月”。

所有的文件名,这是我一直的数据框名称,按照这个结构:个月] _ [] _ [...其它文本],例如 “August_2012_foo_bar”。所以我想我会用正则表达式来抓取当年的第一个月。我的代码存根是:

for(dataset in names(datalists)) { 
    name <- dataset 
    month <- strapply(name,"^([^_]*).*$") 
    ...? 
} 

正则表达式"^([^_]*).*$"争夺下划线,即前一个月无论发生什么事。当我需要将抓取的月份分配到数据集的新列时,我遇到困难。我已经尝试了assigncbind,但都没有运气。

最后,我想垂直合并所有这些数据集为一个。

感谢您的帮助!

回答

1

你可以引用一个新的列并赋值; R将为您创建专栏。

尝试增加:

datalist[[stem]]$Month <- month 
... 

这将创建一个名为“月”新柱和month变量分配给它。请注意,R将根据需要重复所分配的变量,以便匹配现有的data.frame长度。

所以整个循环看起来像:

for(file in files) { 
    stem <- gsub("\\.csv$","",file) 
    datalist[[stem]] <- read.csv(file) 

    #parse out the month and year here 
    ... 

    #assign to new columns 
    datalist[[stem]]$Month <- month 
    datalist[[stem]]$Year <- year 
} 
+0

完美!非常感谢!我不知道我可以直接将数据框传递给'strapply',这就是为什么我尝试了第二个循环,但与数据框名称搞砸了! – Wilco

相关问题