Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按行组合全局环境中的多个数据帧(rbind)_R_Dataframe_Rbind_Read.csv - Fatal编程技术网

按行组合全局环境中的多个数据帧(rbind)

按行组合全局环境中的多个数据帧(rbind),r,dataframe,rbind,read.csv,R,Dataframe,Rbind,Read.csv,我正在从事一个项目,该项目将从给定文件夹导入所有csv文件,并将它们合并到一个文件中。我能够从文件夹中的每个文件中导入我想要的行和列,但现在需要帮助将它们合并到一个文件中。我不知道最终会有多少个文件(大概120个左右),所以我不想一个接一个地合并它们 以下是我到目前为止的情况: # Import All files rowsToUse <- c(9:104,657:752) colsToUse <- c(15,27,28,29,30,33,35) filenames <

我正在从事一个项目,该项目将从给定文件夹导入所有csv文件,并将它们合并到一个文件中。我能够从文件夹中的每个文件中导入我想要的行和列,但现在需要帮助将它们合并到一个文件中。我不知道最终会有多少个文件(大概120个左右),所以我不想一个接一个地合并它们

以下是我到目前为止的情况:

 # Import All files
 rowsToUse <- c(9:104,657:752)
 colsToUse <- c(15,27,28,29,30,33,35)
 filenames <- list.files("save", pattern="*.csv", full.names=TRUE)
 for (i in seq_along(filenames)) {
   assign(paste("df", i, sep = "."), read.csv(filenames[i])[!is.na(30),][rowsToUse,colsToUse])
 }

 # Merge into one file
 for (i in seq_along(filenames)) {
   df<-rbind(df.[i])
 }
#导入所有文件

rowsToUse由于您已在中读取文件,因此可以尝试以下操作:

do.call(rbind, mget(ls(pattern = "df")))
ls(pattern=df)
应该捕获所有的“df.1”、“df.2”等等。希望您没有使用相同的模式命名其他东西,但是如果使用了,请尝试使用更严格的模式,直到命令仅列出您的
data.frame
s


mget()
会将所有这些文件放入一个
列表中,您可以在该列表中使用
do.call(rbind,…)

既然您已经在中读取了文件,您可以尝试以下操作:

do.call(rbind, mget(ls(pattern = "df")))
ls(pattern=df)
应该捕获所有的“df.1”、“df.2”等等。希望您没有使用相同的模式命名其他东西,但是如果使用了,请尝试使用更严格的模式,直到命令仅列出您的
data.frame
s


mget()。上面的答案似乎是“我们有一个名称非常相似的对象列表,我们如何处理它”。回答:他们不需要有非常相似的名字。它们甚至不必是不同的对象

如果不是通过for循环而是通过lappy()读取文件,则会得到一个包含所有数据帧的单个对象,每个对象都作为一个元素。然后就可以轻松地提取这些数据。所以你会有一些看起来像

#Grab a list of filenames
filenames <- list.files("save", pattern="*.csv", full.names=TRUE)

#Iterate through that list of names, using lapply(), reading the data in.
list_of_data_frames <- lapply(filenames, function(x){

    #Read the data in
    to_return <- read.csv(x)[!is.na(30),][c(9:104,657:752),c(15,27,28,29,30,33,35)])

    #Return it. You could save lines of code (and processor time!) by just reading
    #straight into return(), but it would be a lot less clear.
    return(to_return)
})

#Now use do.call to turn it into a single data frame.
data.df <- do.call("rbind", list_of_data_frames)
#获取文件名列表

文件名这些看起来都很复杂;)。上面的答案似乎是“我们有一个名称非常相似的对象列表,我们如何处理它”。回答:他们不需要有非常相似的名字。它们甚至不必是不同的对象

如果不是通过for循环而是通过lappy()读取文件,则会得到一个包含所有数据帧的单个对象,每个对象都作为一个元素。然后就可以轻松地提取这些数据。所以你会有一些看起来像

#Grab a list of filenames
filenames <- list.files("save", pattern="*.csv", full.names=TRUE)

#Iterate through that list of names, using lapply(), reading the data in.
list_of_data_frames <- lapply(filenames, function(x){

    #Read the data in
    to_return <- read.csv(x)[!is.na(30),][c(9:104,657:752),c(15,27,28,29,30,33,35)])

    #Return it. You could save lines of code (and processor time!) by just reading
    #straight into return(), but it would be a lot less clear.
    return(to_return)
})

#Now use do.call to turn it into a single data frame.
data.df <- do.call("rbind", list_of_data_frames)
#获取文件名列表

文件名先将它们作为列表读入,然后使用
do.call(rbind,your_list)
。先将它们作为列表读入,然后使用
do.call(rbind,your_list)
“上面的答案似乎是关于“我们有一个名称非常相似的对象列表,我们如何处理它”———这就是我们所拥有的:——),你可以去掉
return(to_return)
,首先不要将
read.csv
的输出分配给任何东西,而是+1,以获得一个详细阐述我上述评论的答案……很好的建议!我的一个朋友多年来一直在写R,3个月前才发现有一个显式的return()调用。是的,这就是我们所拥有的,但我们不需要。这是一个不需要存在的问题,为什么让它存在呢?;)。感谢你们提供答案并继续讨论。lappy的建议是一个好主意,当然也清理了代码。”上面的答案似乎是关于“我们有一个名称非常相似的对象列表,我们如何处理它”——好吧,这就是我们所拥有的:-)另外,你可以删掉
return(to_return)
首先不要将
read.csv
的输出分配给任何东西,而是+1,以获得详细阐述我上述评论的答案……很好的建议!我的一个朋友多年来一直在写R,3个月前才发现有一个显式的return()调用。是的,这就是我们所拥有的,但我们不需要。这是一个不需要存在的问题,为什么让它存在呢?;)。感谢你们提供答案并继续讨论。lappy的建议是一个好主意,当然可以清理代码。这是一个快速简单的解决方案,并对其工作原理进行了很好的解释。作为一个相对较新的R用户,我没有听说过ls()或mget()命令,我很欣赏这一解释。这是一个快速简单的解决方案,并对其工作原理进行了很好的解释。作为一个相对较新的R用户,我没有听说过ls()或mget()命令,我很欣赏这些解释。