R 如何快速查找目录中缺少第一行的所有文件?
我有一个.csv格式的文件文件夹。它们中有必要的空白行(这表示激光雷达装置没有测量,这是好的,需要保留)。但有时,第一行是空的,这会抛出代码和包,所有内容都会中止 现在我必须打开每个.csv文件,看看第一行是否为空 我想做以下工作之一,但不知如何: 1) 编写一段代码,快速扫描目录中的所有文件,并告诉我哪些文件缺少第一行 2) 能够跳过仅在开头的空行,这可能会有所不同,有时会有多行是空的 3) 有一个代码,可以在所有.csv文件中循环,并插入一个虚拟的第一行数字,这样所有文件都可以导入R 如何快速查找目录中缺少第一行的所有文件?,r,data-import,read.csv,R,Data Import,Read.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文件,所以我不确定如何实际放入示例,因为这更像是一个理论问题。这里有很多道歉,太棒了。完全错误检查控制台中的所有内容。在某个时刻,我将对其进行排序,将输出放在数据帧中,或者只读取那些要跳过的行(即缺少行的行)的数据帧中。谢谢明亮的完全错误检查控制台中的所有内容。在某个时刻,我将对其进行排序,将输出放在数据帧中,或者只读取那些要跳过的行(即缺少行的行)的数据帧中。谢谢