读取许多csv文件并将结果保存在dataframe中

问题描述 投票:-1回答:2

在同一个文件路径中,我有许多以相同名称开头的不同文件。例子"myfile_"

csv文件。

我有一个特定的代码,我想为每个文件执行。

此代码的输出是5个变量/列。

有没有办法读取每个文件的数据插入代码中并将结果保存在一个数据框中,该数据框将有一个列,该列将是文件的名称和代码输出的列?

可重复的例子。

假设以下数据帧是文件:

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))

myfile_1 <- data.frame(employee, salary, startdate)

myfile_2 <- read.table(header=TRUE, text="text            salary   
laughter        8.50    
happiness       8.44    
love            8.42    
happy           8.30    
laughed         8.26    
laugh           8.22")

执行代码的示例:

sum <- sum(myfile_1$salary)
sub <- sum(myfile_1$salary)/2
addtwo <- sum(myfile_1$salary)+2
subtracttwo <- sum(myfile_1$salary)-2
doubleo <- sum(myfile_1$salary)*2

这是我想为每个文件计算的命令。这就是我要求每次加载一个文件的原因。

因为输出有这样的df:

filename sum sub addtwo subtracttwo doubleo
myfile_1
myfile_2

在其他列中每次执行的结果

r
2个回答
2
投票

我在一个名为'input'的目录中编写了你提供给csv文件的data.frames。您可以将输入替换为您的目录。

list_files <- list.files(path = 'input', pattern = '.csv', full.names = TRUE)

do_code <- function(x) {
  dat <- read.csv(x)
  new_dat <- data.frame(filename = basename(x) %>% gsub(".csv", "", .))
  new_dat$sum <- sum(dat$salary)
  new_dat$sub <- sum(dat$salary) / 2
  new_dat$addtwo <- sum(dat$salary) + 2
  new_dat$subtracttwo <- sum(dat$salary) - 2  
  new_dat$doubleo <- sum(dat$salary) * 2 
  new_dat
}

# using base R
new_dat <- do.call(rbind, lapply(list_files, do_code))

# using purrr package
library(purrr)
new_dat <- map_dfr(list_files, do_code)

#>   filename      sum      sub   addtwo subtracttwo   doubleo
#> 1 myfile_1 71200.00 35600.00 71202.00    71198.00 142400.00
#> 2 myfile_2    50.14    25.07    52.14       48.14    100.28

0
投票

如果要一次读取多个CSV文件并存储在单个数据框中。然后你可以试试这个。

首先在运行此代码后设置工作目录

files = list.files(pattern="*.csv")
# First apply read.csv, then rbind
Data = do.call(rbind, lapply(files, function(x) read.csv(x, stringsAsFactors = F)))
© www.soinside.com 2019 - 2024. All rights reserved.