R语言 我可以导入一个没有逗号分隔符的csv文件吗?

hvvq6cgz  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(130)

使用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 = ",", ...)
}

rioREADME file声明:

rio对文本分隔文件使用data.table::fread(),以自动确定文件格式,而不管扩展名如何。因此,实际上以制表符分隔的CSV仍将正确导入。

所以我一定是漏掉了什么,但我不明白为什么,我知道我可以直接从data.table包中使用fread,但我想知道为什么我会有这个问题,因为我知道这是可能的。

sy5wg1nm

sy5wg1nm1#

首先,library(data.table); df <- fread('tabbed_file.csv')工作得很好。
其次,您“应该”用“制表符分隔”扩展名.tsv保存数据.frame,或者自己定义它的格式。Documentation也很有帮助。

df <- data.frame(X1 = 1:5, X2 = 101:105, X3 = LETTERS[1:5])
write.table(df, file = "tabbed_file.tsv", sep = "\t", row.names = FALSE)
rio::import("tabbed_file.tsv")
#   X1  X2 X3
# 1  1 101  A
# 2  2 102  B
# 3  3 103  C
# 4  4 104  D
# 5  5 105  E
rio::import("tabbed_file.csv", format = "tsv")
#   X1  X2 X3
# 1  1 101  A
# 2  2 102  B
# 3  3 103  C
# 4  4 104  D
# 5  5 105  E
ruarlubt

ruarlubt2#

这是rio包中的一个bug,现在已经被开发人员解决了。他们GitHub帐户上的issue I opened链接到了为修复这个bug而对代码所做的修改。
问题中的示例将正确导入Rio0.4.7版本的数据。

相关问题