Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
R 如何快速查找目录中缺少第一行的所有文件?_R_Data Import_Read.csv - Fatal编程技术网

R 如何快速查找目录中缺少第一行的所有文件?

R 如何快速查找目录中缺少第一行的所有文件?,r,data-import,read.csv,R,Data Import,Read.csv,我有一个.csv格式的文件文件夹。它们中有必要的空白行(这表示激光雷达装置没有测量,这是好的,需要保留)。但有时,第一行是空的,这会抛出代码和包,所有内容都会中止 现在我必须打开每个.csv文件,看看第一行是否为空 我想做以下工作之一,但不知如何: 1) 编写一段代码,快速扫描目录中的所有文件,并告诉我哪些文件缺少第一行 2) 能够跳过仅在开头的空行,这可能会有所不同,有时会有多行是空的 3) 有一个代码,可以在所有.csv文件中循环,并插入一个虚拟的第一行数字,这样所有文件都可以导入 谢谢 这

我有一个.csv格式的文件文件夹。它们中有必要的空白行(这表示激光雷达装置没有测量,这是好的,需要保留)。但有时,第一行是空的,这会抛出代码和包,所有内容都会中止

现在我必须打开每个.csv文件,看看第一行是否为空

我想做以下工作之一,但不知如何:

1) 编写一段代码,快速扫描目录中的所有文件,并告诉我哪些文件缺少第一行

2) 能够跳过仅在开头的空行,这可能会有所不同,有时会有多行是空的

3) 有一个代码,可以在所有.csv文件中循环,并插入一个虚拟的第一行数字,这样所有文件都可以导入


谢谢

这里有一段代码可以执行上面的1和2。我不知道为什么要插入虚拟线,因为可以执行1和2;这样做很简单,但通常修改原始数据文件不是一个好主意

# Create some test files
cat("x,y", "1,2", sep="\n", file = "blank0.csv")
cat("", "x,y", "1,2", sep="\n", file = "blank1.csv")
cat("", "", "x,y", "1,2", sep="\n", file = "blank2.csv")


files <- list.files(pattern = "*.csv", full.names = TRUE)

for(i in seq_along(files)) {
  filedata <- readLines(files[i])
  lines_to_skip <- min(which(filedata != "")) - 1
  cat(i, files[i], lines_to_skip, "\n")
  x <- read.csv(files[i], skip = lines_to_skip)
}

并正确地读入每个数据集。

这里有一段代码可以执行上面的1和2。我不知道为什么要插入虚拟线,因为可以执行1和2;这样做很简单,但通常修改原始数据文件不是一个好主意

# Create some test files
cat("x,y", "1,2", sep="\n", file = "blank0.csv")
cat("", "x,y", "1,2", sep="\n", file = "blank1.csv")
cat("", "", "x,y", "1,2", sep="\n", file = "blank2.csv")


files <- list.files(pattern = "*.csv", full.names = TRUE)

for(i in seq_along(files)) {
  filedata <- readLines(files[i])
  lines_to_skip <- min(which(filedata != "")) - 1
  cat(i, files[i], lines_to_skip, "\n")
  x <- read.csv(files[i], skip = lines_to_skip)
}

并正确读取每个数据集。

我相信下面的两个函数可以满足您的需要。
首先,用一个函数确定文件的第二行空白

second_blank <- function(path = ".", pattern = "\\.csv"){
    fls <- list.files(path = path, pattern = pattern)
    second <- sapply(fls, function(f) readLines(f, n = 2)[2])
    which(nchar(gsub(",", "", second)) == 0)
}
下面是一个示例用法

second_blank(pattern = "csv")  # a first run as an example usage
inx <- second_blank()          # this will be needed later

fl_names <- list.files(pattern = "\\.csv")  # get all the CSV files

df_list <- lapply(fl_names[inx], skip_blank)  # read the problem ones
names(df_list) <- fl_names[inx]               # tidy up the result list
df_list
second_blank(pattern=“csv”)#第一次运行作为示例用法

inx我相信接下来的两个功能可以满足您的需要。
首先,用一个函数确定文件的第二行空白

second_blank <- function(path = ".", pattern = "\\.csv"){
    fls <- list.files(path = path, pattern = pattern)
    second <- sapply(fls, function(f) readLines(f, n = 2)[2])
    which(nchar(gsub(",", "", second)) == 0)
}
下面是一个示例用法

second_blank(pattern = "csv")  # a first run as an example usage
inx <- second_blank()          # this will be needed later

fl_names <- list.files(pattern = "\\.csv")  # get all the CSV files

df_list <- lapply(fl_names[inx], skip_blank)  # read the problem ones
names(df_list) <- fl_names[inx]               # tidy up the result list
df_list
second_blank(pattern=“csv”)#第一次运行作为示例用法

到目前为止你都试过什么?请阅读相关信息以及如何给出建议。这将使其他人更容易帮助您。您可以使用
read.csv
来读取每个文件,比如说,读取10行,计算开始时有多少空行,然后使用
read.csv
告诉它跳过适当的行数。刚才看到@AndrewGustar的评论;这就是下面的代码。条形码消除了文件后面的所有空白行,这是我需要的。因为这个问题涉及导入多个.csv文件,所以我不确定如何实际放入示例,因为这更像是一个理论问题。这里有很多道歉。到目前为止你都试了些什么?请阅读相关信息以及如何给出建议。这将使其他人更容易帮助您。您可以使用
read.csv
来读取每个文件,比如说,读取10行,计算开始时有多少空行,然后使用
read.csv
告诉它跳过适当的行数。刚才看到@AndrewGustar的评论;这就是下面的代码。条形码消除了文件后面的所有空白行,这是我需要的。因为这个问题涉及导入多个.csv文件,所以我不确定如何实际放入示例,因为这更像是一个理论问题。这里有很多道歉,太棒了。完全错误检查控制台中的所有内容。在某个时刻,我将对其进行排序,将输出放在数据帧中,或者只读取那些要跳过的行(即缺少行的行)的数据帧中。谢谢明亮的完全错误检查控制台中的所有内容。在某个时刻,我将对其进行排序,将输出放在数据帧中,或者只读取那些要跳过的行(即缺少行的行)的数据帧中。谢谢