需要跳过 R 中不同数量的行

问题描述 投票:0回答:2

我正在使用以下代码来处理我的数据,但最近我意识到使用 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)
r split data.table grepl skip
2个回答
0
投票

根据

fread
函数的文档,跳过参数:

跳过
如果 0(默认值)从第一行开始,然后从那里找到具有一致列数的第一行。这会自动避免在列名行之前出现不规则的标题信息。 skip>0 表示手动忽略第一个跳过的行。 skip="string" 在文件中搜索“string”(例如列名行的子字符串)并从该行开始(受 gdata 包中的 read.xls 启发)。

所以只需从您的

skip = 27
电话中删除
lapply

dt <- lapply(filelist, fread)

0
投票

从您的示例来看,您要阅读的第一行似乎以

Date/Time
开头。

?fread
文档,
skip
可以是:

...

skip="string"
在文件中搜索
"string"
(例如,列名称行的子字符串)并从该行开始(受包中的
read.xls
gdata
启发)。

使用它,我认为你可以做到

dt <- lapply(filelist, fread, skip = "Date/Time")
© www.soinside.com 2019 - 2024. All rights reserved.