Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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
从多个csv文件中选择n行,并使用R写入同一目录中的新文件_R_Loops_Csv_Subset - Fatal编程技术网

从多个csv文件中选择n行,并使用R写入同一目录中的新文件

从多个csv文件中选择n行,并使用R写入同一目录中的新文件,r,loops,csv,subset,R,Loops,Csv,Subset,这可能是一个非常简单的问题,但我尚未找到答案/解决方案 我有一个包含几个csv文件的文件夹。我的目标是遍历所有文件,从每个文件中选择n行,并将所选行写入单独的文件。我的搜索只返回了如何对单个文件执行此操作 temp = list.files(pattern = '*.csv') for (i in 1:length(temp)) { i = as.data.frame(i) n120 = i[120, ] outFile = paste(file_path_sans_ext

这可能是一个非常简单的问题,但我尚未找到答案/解决方案

我有一个包含几个csv文件的文件夹。我的目标是遍历所有文件,从每个文件中选择n行,并将所选行写入单独的文件。我的搜索只返回了如何对单个文件执行此操作

temp = list.files(pattern = '*.csv')

for (i in 1:length(temp)) {
   i = as.data.frame(i) 
   n120 = i[120, ]
   outFile = paste(file_path_sans_ext(i), "_120.csv", sep="")
   write.csv(n120, file = outFile)
}
Temp返回所有感兴趣的文件。然而,for循环不会返回前120行以及被调用的csv文件的所有列,而是NA。这是因为R将文件列表存储为字符串吗

建议以什么方式访问和迭代列表中的每个csv文件

提前谢谢

这里有一个使用apply的示例,但是其他几个迭代器可以使用不同的方法,包括for循环或lappy。这个代码示例使用一个临时目录来防止任何运行此代码的人弄乱他们的工作目录。在本地运行此命令时删除setwd命令

library(tidyverse) # dplyr and friends
library(stringr)   # For parsing file names

old_wd <- getwd()
setwd(tempdir())   # Use a temporary directory
现在,在数据边距=1的每一行上应用该函数

还原以前的工作目录

file_list <- list.files() %>%
  tbl_df() %>%
  filter(str_detect(value, ".csv"))
setwd(old_wd)

非常感谢。我使用虚拟变量进行了测试,但收到了tibble的错误:tibblea=rnorm327中的错误,b=rnorm327:在“frame_data”调用中未检测到列名。添加了列名,但返回的列长度不同。创建了一个随机df,但出现错误:在临时目录中列出csv文件时,数据不是数据框。使用实际数据,我对“files=list.filespath=old\u wd,pattern=*.csv”使用parse\u csv函数,然后使用MARGIN=1使用“apply”。仍然收到错误dimx必须具有正长度。请问我应该换什么?
parse_csv <- function(file) {
  print(file)
  read_csv(file) %>%
    head(120) %>%
    write_csv(paste0(file, "-head.csv"))

  return(TRUE)
}
apply(file_list, MARGIN = 1, parse_csv)
setwd(old_wd)