我有一个包含几个 .csv 文件的文件夹。我需要删除所有这些 .csv 文件的前三行和最后一行,然后将它们全部保存为 .txt 文件。所有文件都具有相同的格式,因此我需要删除的始终是相同的行。 我知道如何修改单个数据框,但不知道如何加载、修改并另存为 txt 格式的多个数据框。 作为 R 的初学者,我还没有尝试过任何示例。 非常感谢您的帮助!
起初使用stackoverflow可能会比较困难,但是其他评论关于可重复示例的建议值得我们在未来考虑。我建议编写一个函数,用于读取、修改和写入数据,然后将其循环应用于所有文件。
由于看不到你的数据,无法确定具体如何实现,但以下类似代码可以参考:
library('tidyverse')
old_paths = list.files(
path = your_folder,
pattern = '\\.csv$',
full.names = TRUE
)
read_write = function(path){
new_filename = str_replace(
string = path,
pattern = '\\.csv$',
replacement = '.txt'
)
read_csv(path) %>%
slice(-(1:3)) %>%
slice(-n()) %>%
write_tsv(new_filename) %>%
invisible()
}
lapply(old_paths, read_write)
readr
库只查看数据集的顶部,并根据此做出数据类型的假设。如果文件后面的数据非常不同,则无法正确导入。您可以在这里了解更多信息,但是在 read_csv
调用中添加 col_types = cols(.default = 'c')
可能很容易解决问题。 - svenhalvorson让我们针对一个数据框架进行操作,只引用其文件名
input_file = "my_data_1.csv"
data = read.csv(input_file)
# modify
data = data[-(1:3), ] # delete first 3 rows
data = data[-nrow(data), ] # delete last row
# save as .txt
output_file = sub("csv$", "txt", input_file)
write.table(x = data, file = output_file, sep = "\t", row.names = FALSE)
my_txt_convert = function(input_file) {
data = read.csv(input_file)
# modify
data = data[-(1:3), ] # delete first 3 rows
data = data[-nrow(data), ] # delete last row
# save as .txt
output_file = sub("csv$", "txt", input_file)
write.table(x = data, file = output_file, sep = "\t", row.names = FALSE)
}
to_convert = list.files(pattern='.*.csv')
for (file in to_convert) {
my_txt_convert(file)
}
# or
lapply(to_convert, my_txt_convert)
write.csv()
或write.table()
吗?只需确保文件名以.txt
结尾即可。(3)您知道如何使用for
循环吗? - duckmayrskip=3
忽略CSV文件中的前3行,并使用nrows
参数指定要读取的行数。 - Edward