如何将多个csv文件完全外部连接到R中的单个data.table中?
我已经使用python处理熊猫数据帧有一段时间了。我想将我正在使用的代码切换到R。然而,我对R没有太多的经验,我不确定我有什么选择可以做同样的事情。我有一个包含许多csv文件的文件夹,我有一个文件名列表,我想对这些文件进行迭代并进行完整的外部连接 在pandas中,我将运行以下命令如何将多个csv文件完全外部连接到R中的单个data.table中?,r,csv,dataframe,join,data.table,R,Csv,Dataframe,Join,Data.table,我已经使用python处理熊猫数据帧有一段时间了。我想将我正在使用的代码切换到R。然而,我对R没有太多的经验,我不确定我有什么选择可以做同样的事情。我有一个包含许多csv文件的文件夹,我有一个文件名列表,我想对这些文件进行迭代并进行完整的外部连接 在pandas中,我将运行以下命令 import pandas as pd filelist = pd.read_excel("/Users/XXX/Documents/test/data/list.xlsx") #contains a list of
import pandas as pd
filelist = pd.read_excel("/Users/XXX/Documents/test/data/list.xlsx") #contains a list of filenames in the File column around 8000 rows long
workingdf = pd.DataFrame() #create a blank data frame
for subdir in filelist.File:
df = pd.read_csv(f"/Users/XXX/Documents/test/data/{subdir}",index_col=0) #open file 2 columns named DATE and VALUE
df = df.rename(columns={"VALUE":subdir}) #rename the value column to the file name
workingdf = pd.merge(workingdf,df,how='outer',left_index=True,right_index=True)
代码的最后一部分使用完全外部联接将字典中的所有数据帧合并到一个大数据帧中
我想在一个文件夹中收集一堆csv文件,迭代文件名列表,用这些文件创建数据表,然后一个接一个地添加它们,在R中创建一个大数据表
我正试图切换到R,因为我遇到了内存和效率问题,有人建议我试试
如何在R中运行相同的指令集?我没有太多的经验,但我有以下代码到目前为止
library(openxlsx)
library(data.table)
filelist <- openxlsx::read.xlsx("/Users/XXX/Documents/test/data/list.xlsx")
for (row in filelist[1]){
}
库(openxlsx)
库(数据表)
filelistCSV列表上完全外部连接的示例
library(data.table)
#get list of csv in current folder
l <- list.files(pattern="(.*).csv")
#use data.table::fread to read them and then merge with all=TRUE for full outer join
#Reduce is a recursive function takes prev output to be merged with next input
Reduce(function(x, y) merge(x, y, by="DATE", all=TRUE), lapply(l, fread))
库(data.table)
#获取当前文件夹中的csv列表
lCSV列表上的完全外部联接示例
library(data.table)
#get list of csv in current folder
l <- list.files(pattern="(.*).csv")
#use data.table::fread to read them and then merge with all=TRUE for full outer join
#Reduce is a recursive function takes prev output to be merged with next input
Reduce(function(x, y) merge(x, y, by="DATE", all=TRUE), lapply(l, fread))
库(data.table)
#获取当前文件夹中的csv列表
l可以使用R函数,如paste0()
或sprintf()
为要读入R的文件列表构建完整的路径文件名。下面是一个示例,下载前七代神奇宝贝的电子表格,解压缩文件,并使用sprintf()
构建读取每个文件的路径名
download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/PokemonXLSX.zip",
"PokemonXLSX.zip",
method="curl",mode="wb")
unzip("PokemonXLSX.zip")
library(readxl)
# create a set of numbers to be used to generate file names
# that have leading zeros, e.g. gen01.xlsx, gen02.xlsx, etc.
generationIds <- 1:7
spreadsheets <- lapply(generationIds,function(x) {
# use generation number to create individual file name
aFile <- sprintf("./PokemonData/gen%02i.xlsx",x)
data <- read_excel(aFile)
})
可以使用R函数,如paste0()
或sprintf()
为要读入R的文件列表构建完整路径文件名。下面是一个示例,它下载前七代神奇宝贝的电子表格,解压缩文件,并使用sprintf()
构建读取每个文件的路径名
download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/PokemonXLSX.zip",
"PokemonXLSX.zip",
method="curl",mode="wb")
unzip("PokemonXLSX.zip")
library(readxl)
# create a set of numbers to be used to generate file names
# that have leading zeros, e.g. gen01.xlsx, gen02.xlsx, etc.
generationIds <- 1:7
spreadsheets <- lapply(generationIds,function(x) {
# use generation number to create individual file name
aFile <- sprintf("./PokemonData/gen%02i.xlsx",x)
data <- read_excel(aFile)
})
比如:如果我想使用我自己的文件名列表怎么办?我想这段代码是按行添加的,我想按如下方式进行完整的外部连接列:如果我想使用我自己的文件名列表怎么办?我想这段代码是按行添加的,我想做一个完整的外部连接列如果我想提供我自己的列表怎么办?然后用你的列表替换l
如果我使用read.xlsx,格式会一样吗?文件名需要与目录连接。我不知道电子表格的外观。您可以对完整路径使用full.names=TRUE
参数。试一试,看看您还有什么其他问题,因为如果我们没有您的数据,我们无法提供帮助。有一个WIP PR建议apimergelist(l,on=“DATE”,how=“full”)
如果我想提供我自己的列表,该怎么办?然后用您的列表替换l
。如果我使用read.xlsx,格式会一样吗?文件名需要与目录连接。我不知道电子表格的外观。您可以对完整路径使用full.names=TRUE
参数。试一试,看看您还有什么其他问题,因为如果我们没有您的数据,我们无法提供帮助。有一个WIP PR建议apimergelist(l,on=“DATE”,how=“full”)