使用 lapply 跳过最后 N 行,然后使用 read.csv
Skipping last N rows with lapply and then read.csv
我是一名 R 初学者,正在尝试读取多个 csv 文件,remove/skip 每个文件的最后 5 行,然后将它们绑定在一起。我无法弄清楚删除行的步骤以及使用什么功能?我尝试了下面的 readLines
然后尝试使用 nrow,但我很确定它在错误的地方。
我是这样开始的:
alldata <- do.call(rbind, lapply(list.files(path = "./savedfiles", full.names = TRUE), read.csv))
我不确定在哪里删除该代码中的行,所以我将其拆分以理解它并尝试使用 readLines
:
files<- list.files(path = "./savedfiles", full.names = TRUE)
c <- lapply(files, readLines) - to count the rows
alldata<- do.call(rbind,lapply(files, nrow = length(f) - 5, full.names = TRUE), read.csv)
这只是抛出一个错误,指出缺少参数 FUN,所以我知道我做得不对,但不确定如何解决。
像这样的事情应该会让你走上正轨。这首先读取文件,然后删除最后 5 行,最后将它们绑定在一起。还建议不要使用可能与函数名称冲突的变量名称。 files
和 c
是 base R 中的函数。在这里,我使用 all_files
而不是 files
。 -
all_files <- list.files(path = "./savedfiles", full.names = TRUE)
do.call(rbind, # assuming columns match 1:1; use dplyr::bind_rows() if not 1:1
lapply(all_files, function(x) {
head(read.csv(x, header = T, stringsAsFactors = F), -5) # change as per needs
})
)
使用 tidyverse
你可以做的功能
library(purrr)
library(dplyr)
all_files <- list.files(path = "./savedfiles", full.names = TRUE)
map_df(all_files, ~read.csv(.x) %>% slice(seq_len(n()-5)))
我是一名 R 初学者,正在尝试读取多个 csv 文件,remove/skip 每个文件的最后 5 行,然后将它们绑定在一起。我无法弄清楚删除行的步骤以及使用什么功能?我尝试了下面的 readLines
然后尝试使用 nrow,但我很确定它在错误的地方。
我是这样开始的:
alldata <- do.call(rbind, lapply(list.files(path = "./savedfiles", full.names = TRUE), read.csv))
我不确定在哪里删除该代码中的行,所以我将其拆分以理解它并尝试使用 readLines
:
files<- list.files(path = "./savedfiles", full.names = TRUE)
c <- lapply(files, readLines) - to count the rows
alldata<- do.call(rbind,lapply(files, nrow = length(f) - 5, full.names = TRUE), read.csv)
这只是抛出一个错误,指出缺少参数 FUN,所以我知道我做得不对,但不确定如何解决。
像这样的事情应该会让你走上正轨。这首先读取文件,然后删除最后 5 行,最后将它们绑定在一起。还建议不要使用可能与函数名称冲突的变量名称。 files
和 c
是 base R 中的函数。在这里,我使用 all_files
而不是 files
。 -
all_files <- list.files(path = "./savedfiles", full.names = TRUE)
do.call(rbind, # assuming columns match 1:1; use dplyr::bind_rows() if not 1:1
lapply(all_files, function(x) {
head(read.csv(x, header = T, stringsAsFactors = F), -5) # change as per needs
})
)
使用 tidyverse
你可以做的功能
library(purrr)
library(dplyr)
all_files <- list.files(path = "./savedfiles", full.names = TRUE)
map_df(all_files, ~read.csv(.x) %>% slice(seq_len(n()-5)))