导入时跳过不同的行数

时间:2018-02-15 09:56:59

标签: r

我正在导入大量数据集。所有这些都在顶部(标题之前)有一些空行,但是它并不总是与我需要跳过的行数相同。

现在我正在使用:

 df2 <- read_delim("filename.xls", 
             "\t", escape_double = FALSE,
             guess_max=10000, 
             locale = locale(encoding = "ISO-8859-1"),
             na = "empty", trim_ws = TRUE, skip = 9)

但有时我只需跳过3行fx。

我可以以某种方式设置一条规则,当我的列B(在Excel中)在句子开头包含以下单词之一时:

Datastatistik

Overførte记录

FI-CA

Oprettet

A列始终为空,但我在导入后在代码中将其删除。

这是我的数据示例(我隐藏了个人号码):

Example data

我的第一个变量标题叫做“ Bilagsnummer ”或“ Bilagsnr。”。 我不知道是否可以设置一个规则,说明这个单词的第一次出现就是我的标题?真的我只是在这里集思广益,因为我不知道如何自动化这个数据导入。

--- --- EDIT

我看了@Bram链接的帖子,它确实解决了我的一些问题。

我改变了一些。 这是我使用的代码:

 temp <- readLines("file.xls")
 skipline <- which(grepl("\tDatastatistik", temp) | 
                grepl("\tOverførte", temp) |
                grepl("FI-CA", temp) | 
                grepl("Oprettet", temp) |
                temp == "")

所以我制作的 skipline 整数包含了那些需要跳过的行。这些都是正确的使用grepl函数(因为句子末尾的措辞不时变化)。

现在,我仍然有问题。 当我在 read.delim 中使用 skip = skipline 时,它仅适用于第一行。

我收到警告信息:

  In if (skip > 0L) readLines(file, skip) :
  the condition has length > 1 and only the first element will be used

1 个答案:

答案 0 :(得分:0)

可能找到了解决方案,但不是最佳解决方案。我们来看看。

用空行导入你的df:

df2 <- read_delim("filename.xls", 
         "\t", escape_double = FALSE,
         guess_max=10000, 
         locale = locale(encoding = "ISO-8859-1"),
         na = "empty", trim_ws = TRUE)

在开头找到空行数:

NonNAindex <- which(!is.na(df2[,2]))
lastEmpty  <- (min(NonNAindex)-1)

使用该信息重新导入您的文档:

df2 <- read_delim("filename.xls", 
         "\t", escape_double = FALSE,
         guess_max=10000, 
         locale = locale(encoding = "ISO-8859-1"),
         na = "empty", trim_ws = TRUE, skip = lastEmpty)