首页 > 解决方案 > 使用 read_csv 应用

问题描述

我无法理解 lapply 与 read_csv 函数。问题是 Lapply 是否创建了一个数据帧数组,我可以在其中使用 data[i] 访问每个数据帧?

我做了什么:

我已经下载了 5 个城市的数据集(在这里找到:https ://archive.ics.uci.edu/ml/machine-learning-databases/00394/FiveCitiePMData.rar )并编写了 R 代码来提取 5 个 csv 文件并保存数据框如下:

cities <- list.files('FiveCities')
cities_df <- lapply(cities, read.csv)

我的目标是创建一个工作簿并将每个 csv 文件保存到一个 xlsx 文件中,每个 csv 都是工作簿中的一个工作表,如下所示:

wb <- createWorkbook()
for(i in 1:length(cities)){
    sheet <- addWorksheet(wb , i)
    writeData(wb, sheet, cities_df[i])
}

我感到困惑的是访问每个 csv 像这样的城市_df [i]。我认为 city_df[i] 访问数据框的第 i 行,而不是整个单独的数据框。lapply 是否会创建一个名为 city_df[i] 的数据框数组,或者会发生什么?如果它确实创建了一个数组,那么我为什么可以简单地调用 city_df 并接收结果而不指定要调用数组中的哪个数据框?

标签: rlapply

解决方案


此代码可能会有所帮助!

library(plyr)
library(readr)
library(tidyverse)
library(openxlsx)
mydir = "C:/Users/mouad/Desktop/assasins creed/new"
myfiles = list.files(path=mydir, pattern="*.csv", full.names=TRUE)
str_length(mydir)
 
mylist=lapply(1:5, function(j) read_csv(myfiles[[j]]))
setwd(mydir)
wb <- createWorkbook()
lapply(1:length(mylist), function(i){
  addWorksheet(wb=wb, sheetName = substr(myfiles[i],str_length(mydir)+1,60))
  writeData(wb, sheet = i, mylist[[i]][length(mylist[[i]])])
})
saveWorkbook(wb, "test.xlsx", overwrite = TRUE)    
 read.xlsx("test.xlsx", sheet = 1)    

推荐阅读