数据.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”,如下所示:Index
Time
Index Time
1 2 1423
2 3 5123
我该怎么做?
数据.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”,如下所示:Index
Time
Index Time
1 2 1423
2 3 5123
我该怎么做?
很抱歉,没有直接的方法可以实现这一点。要么您阅读整个表格并在之后删除不需要的行,要么您在表格中读取两次并稍后分配标题:
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)
, stringsAsFactors=FALSE
才能使其正常工作。 - Thomas;
结尾,导致缺少一列和包含 NA
的列名。这确实会在调用 unlist(header)
时出现问题。 - Beasterfieldas.is=T
而不是 stringsAsFactors=FALSE
,看起来效果一样。 - airstrike您正在错误地使用skip。请尝试以下方法:
dat <- read.table('data.txt', nrows = 2, header =TRUE, sep =';')[-1, ]
Index 2 Time 1423
。 - Csislander使用readr
函数,例如read_csv()
,而不是read.table()
,并将其管道传递到dplyr::slice()
。
library(readr)
library(dplyr)
dat <- read_csv("data.txt") %>% slice(-1)
它也非常快速。
readr
的列规范是如何工作的?在导入数据后有没有好的方法来分配列类型? - Andrew Jacksonrequire(data.table)
fread("Data.txt", drop = "V3")[-1]
结果:
> fread("Data.txt", drop = "V3")[-1]
Index Time
1: 2 1423
2: 3 5123
;
替换为 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