30

数据.txt:

Index;Time;
1;2345;
2;1423;
3;5123;

编码:

dat <- read.table('data.txt', skip = 1, nrows = 2, header =TRUE, sep =';')

结果:

  X1 X2345
1  2  1423
2  3  5123

我希望标题是索引和时间,如下所示:

  Index Time
1   2   1423
2   3   5123

我怎么做?

4

5 回答 5

38

恐怕没有直接的方法可以实现这一目标。要么阅读整个表格,然后删除不需要的行,要么在表格中阅读两次并稍后分配标题:

header <- read.table('data.txt', nrows = 1, header = FALSE, sep =';', stringsAsFactors = FALSE)
dat    <- read.table('data.txt', skip = 2, header = FALSE, sep =';')
colnames( dat ) <- unlist(header)
于 2014-05-08T14:10:00.270 回答
8

您使用的跳过不正确。试试这个:

dat <- read.table('data.txt', nrows = 2, header =TRUE, sep =';')[-1, ]
于 2014-05-08T14:04:48.117 回答
3

使用freadfrom的解决方案data.table

require(data.table)
fread("Data.txt", drop = "V3")[-1]

结果:

> fread("Data.txt", drop = "V3")[-1]
   Index Time
1:     2 1423
2:     3 5123
于 2014-05-08T14:58:56.887 回答
2

而不是read.table()使用readr诸如read_csv()管道传输到的函数dplyr::slice()

library(readr)
library(dplyr)
dat <- read_csv("data.txt") %>% slice(-1)

它也非常快。

于 2016-10-26T12:12:15.830 回答
1

您可以(在大多数情况下)sub在结尾处;写一个没有第二行的新文件(由于标题,这实际上是第一行),并使用read.csv而不是read.table

> txt <- "Index;Time;
  1;2345;
  2;1423;
  3;5123;" 
> writeLines(sub(";$", "", readLines(textConnection(txt))[-2]), 'newTxt.txt')
> read.csv('newTxt.txt', sep = ";")
##   Index Time
## 1     2 1423
## 2     3 5123
于 2014-05-08T16:44:27.787 回答