dplyr:如何在跳过某些行时读取带有标题的tsv文件?

时间:2016-11-17 13:58:36

标签: r csv data.table dplyr readr

我有一个简单的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,但这是问题所在。

如您所见,第一行包含标题。然后我有三行我 NOT 想要读它(它们包含来自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)

不解析标题...

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

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替换了object Test { import scala.language.implicitConversions case class C1() {} case class C2() {} implicit def c1ToC2(in: C1): C2 = C2() def from[A, B](in: A)(implicit f: A => B): B = f(in) def fails(): Future[C2] = { val future: Future[C1] = Future.successful(C1()) future.map(from) // this line fails to compile! } def compiles1(): Future[C2] = { val future: Future[C1] = Future.successful(C1()) future.map(x => from(x)) } def compiles2(): Future[C2] = { val future: Future[C1] = Future.successful(C1()) future.map(from[C1, C2]) } } }}