使用rio
包中的import
函数,我尝试导入一个带有非comma
分隔符的csv
文件,但无法正确导入。
示例:
df <- data.frame(X1 = 1:5, X2 = 101:105, X3 = LETTERS[1:5])
write.table(df, file = "tabbed_file.csv", sep = "\t", row.names = FALSE)
rio::import("tabbed_file.csv")
但是这是作为一个只有一列的数据框导入的。
X1"\t"X2"\t"X3
1 1"\t1\t101\t"A
2 2"\t2\t102\t"B
3 3"\t3\t103\t"C
4 4"\t4\t104\t"D
5 5"\t5\t105\t"E
我也试过:
rio::import("tabbed_file.csv", sep = "\t")
但这会产生一个错误:
import_delim(文件=形式参数“sep”与多个实际参数匹配)出错
我想我可以通过查看GitHub上的code for the import method来理解这一点,因为sep参数是硬编码在方法中的:
.import.rio_csv <- function(file, which = 1, ...){
import_delim(file = file, sep = ",", ...)
}
rio
的README file声明:
rio对文本分隔文件使用data.table::fread(),以自动确定文件格式,而不管扩展名如何。因此,实际上以制表符分隔的CSV仍将正确导入。
所以我一定是漏掉了什么,但我不明白为什么,我知道我可以直接从data.table
包中使用fread,但我想知道为什么我会有这个问题,因为我知道这是可能的。
2条答案
按热度按时间sy5wg1nm1#
首先,
library(data.table); df <- fread('tabbed_file.csv')
工作得很好。其次,您“应该”用“制表符分隔”扩展名
.tsv
保存数据.frame,或者自己定义它的格式。Documentation也很有帮助。ruarlubt2#
这是
rio
包中的一个bug,现在已经被开发人员解决了。他们GitHub帐户上的issue I opened链接到了为修复这个bug而对代码所做的修改。问题中的示例将正确导入
Rio
的0.4.7
版本的数据。