【问题标题】:dplyr : how to read a tsv file with headers while skipping some lines? [duplicate]dplyr:如何在跳过某些行的同时读取带有标题的 tsv 文件? [复制]
【发布时间】:2017-04-01 02:37:06
【问题描述】:

我有一个简单的tsv 文件,其结构如下:

0 - headerline
1 - empty line
2 - PIG schema
3 - empty line
4 - 1-st line of DATA
5 - 2-nd line of DATA

我想阅读它,可能使用readr::read_tsv,但问题就在这里。

如您所见,第一行包含标题。然后我有三行我确实想要读取它(它们包含一些来自 Apache PIG 的超级奇怪的数据),并且在第 4 行数据开始。在Pandas,我会做类似的事情

df = pd.read_csv('/localpath/data.tsv', sep='\t', skiprows=[1,2,3])

这允许我阅读标题 AND 以跳过第一、二、三行。

我在readr::read_tsv 中没有看到类似的选项。那就是:

df = read_tsv('/localpath/data.tsv', col_names = TRUE, skip = 4)

不解析标题...

有什么想法吗?

【问题讨论】:

  • 可能在第一行作为单独的对象读取,然后在其余行中读取?
  • 使用普通的read.table ?
  • 是的,也叫skip
  • names_t <- read.*sv(..., nrows = 1); df1 <- read.*sv(..., skip = 4, header = F); names(df1) <- names_t?

标签: r csv data.table dplyr readr


【解决方案1】:

发表我的评论作为答案。基本上,我们读取第一行作为我们的标题,然后读取剩余的行作为数据:

library(readr)
names_t <- read_tsv('/localpath/data.tsv', col_names = FALSE, n_max = 1)
df1 <- read_tsv('/localpath/data.tsv', col_names = FALSE, skip = 4)
names(df1) <- names_t

请注意,在我的评论中,我指定 nrows = 1 读取名称(这适用于 read.csv),但似乎此参数已替换为 n_max 中的 readr::read_tsv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2021-02-04
    • 2021-02-16
    相关资源
    最近更新 更多