【问题标题】:Grouping data frames in R在 R 中对数据框进行分组
【发布时间】:2015-12-04 16:24:58
【问题描述】:

我正在开展一个项目,其中第一步涉及将大量数据帧合并在一起。

到目前为止,我将所有 .csv 文件导入到包含访问数据库输出的目录中。这些是使用不同方法收集的数据,并按数据收集年份划分。所有这些元数据都包含在文件名中:Gap.2013.csv 是包含 2013 年所有 Gap-Intercept 数据的 csv,SR.2014.csv 包含 2014 年的物种丰富度数据。

接下来,一段重复的代码创建一列指定“年份”变量,并将类似的数据类型绑定在一起。

示例代码如下

setwd("AIMRD Exports/CSV") 
list.filenames <- list.files(pattern="*.csv") 
for (i in 1:length(list.filenames)) {
  assign(list.filenames[i],            
  read.csv(paste(list.filenames[i], sep='')))} 

Gap.2013.csv$Year <- 2013     
SR.2013.csv$Year <- 2013 
Gap.2014.csv$Year <- 2014     
SR.2014.csv$Year <- 2014 
Gap.2015.csv$Year <- 2015     
SR.2015.csv$Year <- 2015  
Gap <- rbind (Gap.2013.csv, Gap.2014.csv, Gap.2015.csv) 
SR <- rbind (SR.2013.csv, SR.2014.csv, SR.2015.csv)

有人对如何减少重复有任何建议吗?我的第一个想法是以某种方式修改顶部的循环并使用 list.files(pattern = x),但到目前为止还没有运气。

【问题讨论】:

标签: r


【解决方案1】:

我建议将前两行放在获取文件列表的位置。然后你可以编写一个函数来打破这些。

library(plyr)
library(stringr)

myFun <- function(files, method) {
    files <- files[grep(method, files)] #Get a list of files for one type of method.
    dat <- mdply(files,
                 function(file) {
                     year <- str_extract(file, "\\d{4}")
                     iDat <- read.csv(file, stringsAsFactors=FALSE)
                     iDat$Year <- year
                     return(iDat)
                 })
    return(dat)
}

Gap <- myFun(list.files, 'Gap') #method argument is case-sensitive
SR <- myFun(list.files, 'SR')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多