我正在分析一个包含200行和1200列的数据集,该数据集存储在一个.CSV
文件中。为了处理数据,我使用R语言的read.csv()
函数来读取这个文件。
R语言需要大约600秒来读取这个数据集。后来我有一个想法,对.CSV
文件中的数据进行转置,并再次使用read.csv()
函数进行读取。令人惊讶的是,这次只用了大约20秒的时间。你可以看到它快了大约30倍。
我进行了以下迭代验证:
读取200行和1200列(未转置)
> system.time(dat <- read.csv(file = "data.csv", sep = ",", header = F))
user system elapsed
610.98 6.54 618.42 # 1st iteration
568.27 5.83 574.47 # 2nd iteration
521.13 4.73 525.97 # 3rd iteration
618.31 3.11 621.98 # 4th iteration
603.85 3.29 607.50 # 5th iteration
读取1200行和200列(转置)
> system.time(dat <- read.csv(file = "data_transposed.csv",
sep = ",", header = F))
user system elapsed
17.23 0.73 17.97 # 1st iteration
17.11 0.69 17.79 # 2nd iteration
20.70 0.89 21.61 # 3rd iteration
18.28 0.82 19.11 # 4th iteration
18.37 1.61 20.01 # 5th iteration
在任何数据集中,我们采用行来观察变量,列来包含要观察的变量。转置会改变数据的结构。即使它使数据看起来奇怪,将数据转置以进行处理是一个好习惯吗?
我想知道为什么当我转置数据时,R可以快速读取数据集。我确定这是因为先前的维度是200 * 1200
,转置操作后变成了1200 * 200
。
为什么当我转置数据时,R可以快速读取数据?
更新:研究和实验
我最初提出这个问题是因为我的RStudio在读取和计算高维数据集(相对于行而言有很多列[200行,1200列])时需要很长时间。我使用内置的R函数read.csv()
。我阅读了下面的评论,根据他们的建议,我尝试了read.csv2()
和fread()
函数,它们都表现良好,但它们对于我的原始数据集[200行*1200列]执行得比较慢,而它们读取转置的数据集却更快。
我发现这也适用于 MS-Excel和 Libre office Calc。我甚至尝试将其打开到 Sublime Text编辑器中,即使对于这个文本编辑器,读取转置数据也很容易(快速)。我仍然无法弄清楚为什么所有这些应用程序都会这样做。如果您的数据的列比行多,所有这些应用程序都会遇到麻烦。
因此,总结整个故事,我只有3个问题。
- 这是什么问题?它与操作系统有关还是应用程序级别的问题?
- 将数据转置以进行处理是一种好习惯吗?
- 为什么R或其他应用程序在转置数据时读取我的数据很快?
我的实验可能帮助我重新发现一些“已知”的智慧,但我在互联网上找不到任何相关信息。请分享这样的良好编程/数据分析实践。
[.CSV]
是最流行的数据格式。 你可能是对的,我肯定会尝试使用 read_csv(),谢谢。同时,我尝试使用 Sublime 文本编辑器读取这两个数据集,结果和我预期的一样。Sublime 花费了很多时间来读取“未转置”的数据集。另一方面,它在相对较短的时间内加载了转置数据。 - user2273202