我正在使用以下代码来处理我的数据,但最近我意识到使用 skip = 27(在数据开始之前跳过存储在我的文件中的信息,这不是一个好的选择,因为要跳过的行数在每个文件。我的目标是读取存储在多个文件夹中的各种 txt 文件(并非所有文件都具有相同的列数并固定温度的列名)。我的数据显示如下:
/* DATA DESCRIPTION:
Algorithm
Checks
Version
..
..
Parameter(s)
*/
Date/Time Pres [Pa] Wind [m/s] Temp....
2022-01-01S00:00:00 278 23 29....
2022-01-01S01:00:00 277 23 28...
.
.
因此,我不想使用 skip = 27,而是想从 */ 旁边的行读取文件。为此,我尝试遵循此链接上给出的代码,但我无法按照我的要求编写它。谁能帮我相应地修改我的代码。
install.packages("data.table")
library(data.table)
filelist <- list.files("C:/Users/Akanksha/Desktop/BSRN/Test_Gz", full.names = TRUE, recursive
= TRUE, pattern = ".txt$")
dt <- lapply(filelist, fread, skip = 27)
dt.tidied <- lapply(dt, FUN = function(x){
#adjust ? to degree
setnames(x, old = "T2 [?C]", new = "T2 [°C]", skip_absent = TRUE)
colnames(x) <- gsub("\\[", "(", colnames(x))
colnames(x) <- gsub("\\]", ")", colnames(x))
#return
return(x)
})
merged <- rbindlist(dt.tidied, fill = TRUE, use.names = TRUE)
根据
fread
函数的文档,跳过参数:
跳过
如果 0(默认值)从第一行开始,然后从那里找到具有一致列数的第一行。这会自动避免在列名行之前出现不规则的标题信息。 skip>0 表示手动忽略第一个跳过的行。 skip="string" 在文件中搜索“string”(例如列名行的子字符串)并从该行开始(受 gdata 包中的 read.xls 启发)。
所以只需从您的
skip = 27
电话中删除lapply
:
dt <- lapply(filelist, fread)
从您的示例来看,您要阅读的第一行似乎以
Date/Time
开头。
从
?fread
文档,skip
可以是:
...
在文件中搜索skip="string"
(例如,列名称行的子字符串)并从该行开始(受包中的"string"
read.xls
启发)。gdata
使用它,我认为你可以做到
dt <- lapply(filelist, fread, skip = "Date/Time")