如何在读入 R 之前删除文本文件的空第一列
How to delete empty first column of text file before reading into R
我有一个巨大的文本文件,它的第一列是空的,但它有一个列 header。我被告知不要手动删除列 header 因为这个文本文件被另一个应用程序使用。我无法显示它,因为我无法在 R 中阅读它。我听说过 colClasses 但无法使其工作。我也试过 fread
来自 data.table
但没有成功。这是我正在谈论的一个小例子:
我想删除带有a 和a 的第一列。
我试过这个:
require(data.table)
pp <- fread("myfile.txt", drop = 1)
head(pp)
但是报错:
警告信息:
在 fread("myfile.txt,', drop = 1) 中:
在第 3 行提前停止。预期有 524 个字段,但找到了 523 个。
提前致谢。
更新:
这是一个更好的可重现示例。我能够使用 pp <- fread("myfile.txt", skip = 1)
将我的数据集读入 R,但我的列名向右移动,现在我的最后一列充满了 NA。如何删除 a
列名并向左移动所有不带 NA 的列名?
这是一些记录的快照和输出:
a year fday first sec third
1: 1998 1 21.633 21.535 21.481 NA
2: 1998 2 21.146 20.936 20.838 NA
3: 1998 3 20.725 20.651 20.599 NA
4: 1998 4 20.716 20.653 20.620 NA
5: 1998 5 19.606 19.493 19.459 NA
6: 1998 6 18.501 18.314 18.231 NA
pp <- structure(list(a = c(1998L, 1998L, 1998L, 1998L, 1998L, 1998L
), year = 1:6, fday = c(21.633, 21.146, 20.725, 20.716, 19.606,
18.501), first = c(21.535, 20.936, 20.651, 20.653, 19.493, 18.314
), sec = c(21.481, 20.838, 20.599, 20.62, 19.459, 18.231), third = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA,
-6L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x05f82498>)
The final dataset should look like this:
year fday first sec third
1: 1998 1 21.633 21.535 21.481
2: 1998 2 21.146 20.936 20.838
3: 1998 3 20.725 20.651 20.599
4: 1998 4 20.716 20.653 20.620
5: 1998 5 19.606 19.493 19.459
6: 1998 6 18.501 18.314 18.231
pp <- data.table::fread("myfile.txt",skip=1)
所以您已经有了所需的数据,但列混乱了?
试试这个 -
#Rename column 1 to n-1
names(pp)[-ncol(pp)] <- names(pp)[-1]
#Drop the last column.
pp[[ncol(pp)]] <- NULL
pp
# year fday first sec third
#1: 1998 1 21.633 21.535 21.481
#2: 1998 2 21.146 20.936 20.838
#3: 1998 3 20.725 20.651 20.599
#4: 1998 4 20.716 20.653 20.620
#5: 1998 5 19.606 19.493 19.459
#6: 1998 6 18.501 18.314 18.231
我有一个巨大的文本文件,它的第一列是空的,但它有一个列 header。我被告知不要手动删除列 header 因为这个文本文件被另一个应用程序使用。我无法显示它,因为我无法在 R 中阅读它。我听说过 colClasses 但无法使其工作。我也试过 fread
来自 data.table
但没有成功。这是我正在谈论的一个小例子:
我想删除带有a 和a 的第一列。 我试过这个:
require(data.table)
pp <- fread("myfile.txt", drop = 1)
head(pp)
但是报错: 警告信息: 在 fread("myfile.txt,', drop = 1) 中: 在第 3 行提前停止。预期有 524 个字段,但找到了 523 个。 提前致谢。
更新:
这是一个更好的可重现示例。我能够使用 pp <- fread("myfile.txt", skip = 1)
将我的数据集读入 R,但我的列名向右移动,现在我的最后一列充满了 NA。如何删除 a
列名并向左移动所有不带 NA 的列名?
这是一些记录的快照和输出:
a year fday first sec third
1: 1998 1 21.633 21.535 21.481 NA
2: 1998 2 21.146 20.936 20.838 NA
3: 1998 3 20.725 20.651 20.599 NA
4: 1998 4 20.716 20.653 20.620 NA
5: 1998 5 19.606 19.493 19.459 NA
6: 1998 6 18.501 18.314 18.231 NA
pp <- structure(list(a = c(1998L, 1998L, 1998L, 1998L, 1998L, 1998L
), year = 1:6, fday = c(21.633, 21.146, 20.725, 20.716, 19.606,
18.501), first = c(21.535, 20.936, 20.651, 20.653, 19.493, 18.314
), sec = c(21.481, 20.838, 20.599, 20.62, 19.459, 18.231), third = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA,
-6L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x05f82498>)
The final dataset should look like this:
year fday first sec third
1: 1998 1 21.633 21.535 21.481
2: 1998 2 21.146 20.936 20.838
3: 1998 3 20.725 20.651 20.599
4: 1998 4 20.716 20.653 20.620
5: 1998 5 19.606 19.493 19.459
6: 1998 6 18.501 18.314 18.231
pp <- data.table::fread("myfile.txt",skip=1)
所以您已经有了所需的数据,但列混乱了?
试试这个 -
#Rename column 1 to n-1
names(pp)[-ncol(pp)] <- names(pp)[-1]
#Drop the last column.
pp[[ncol(pp)]] <- NULL
pp
# year fday first sec third
#1: 1998 1 21.633 21.535 21.481
#2: 1998 2 21.146 20.936 20.838
#3: 1998 3 20.725 20.651 20.599
#4: 1998 4 20.716 20.653 20.620
#5: 1998 5 19.606 19.493 19.459
#6: 1998 6 18.501 18.314 18.231