【发布时间】:2015-10-23 19:22:53
【问题描述】:
我正在尝试使用 fread() 从 csv 中读取选定的列。我发现我可以使用列号向量,但不能使用列名。关于“选择”参数,文档只是说“要保留的列名或数字的向量,删除其余部分。”他们还提供了
的例子fread(data, select=c("A","D"))
那么,为什么我的代码会抛出 subscript out of bounds 错误?这是我的代码的要点,希望可以推广到其他用户:
test = data.frame(matrix(c(1:50),ncol = 5))
names(test) = c("A", "B", "C", "D", "E")
write.table(test, file = "/Users/me/Desktop/test.txt", sep = ",")
fread("/Users/me/Desktop/test.txt", sep = ",", header = TRUE, select = c("A","B"))
给予
Error in ans[[1]] : subscript out of bounds
但是,这将第一列以及行号作为一列给出:
fread("/Users/me/Desktop/test.txt", sep = ",", header = TRUE, select = c(1,2))
1 1
1: 2 2
2: 3 3
3: 4 4
4: 5 5
5: 6 6
6: 7 7
7: 8 8
8: 9 9
9: 10 10
...而且 read.table() 能够顺利读取整个数据集:
read.table("/Users/me/Desktop/test.txt", sep = ",", header = TRUE)
A B C D E
1 1 11 21 31 41
2 2 12 22 32 42
3 3 13 23 33 43
4 4 14 24 34 44
5 5 15 25 35 45
6 6 16 26 36 46
7 7 17 27 37 47
8 8 18 28 38 48
9 9 19 29 39 49
10 10 20 30 40 50
rownames 和 header 显然有问题,但我不确定如何解决它。我试过有无标题。我正在使用的数据集(不在此示例中)已经具有行名,因此不能使用 rownames = FALSE 重写它。
【问题讨论】:
-
当然。我无法分享数据,但我会提供一个近似值。
-
只是想知道,拥有
header=FALSE然后根据名称进行选择是否有意义? -
那么,如果你告诉
fread实际忽略列名,你如何期望fread知道列名是A、B或C? -
好点,是的,我试过 header=TRUE。 Fwiw, header=FALSE 也不起作用。这只是当前版本的 nonworking 代码。我现在正在研究一个可重现的例子。感谢您的帮助!
-
我的测试文件出现了愚蠢的“空文件”错误,所以同时我会说我查看了 data.table::fread 源代码并且几乎没有使用“选择”参数。可能是一个有趣的思想实验。
标签: r csv data.table fread