我需要阅读大约300个单独的CSV文件。我已经成功地使用循环和结构化的CSV文件名自动化了这个过程。但是,每个CSV文件开头都有14-17行无用的信息,并且随机变化,因此在read.table命令中硬编码一个“跳过”参数是行不通的。每个CSV的列名和列数都相同。
以下是我要处理的示例:
QUICK STATISTICS:
Directory: Data,,,,
File: Final_Comp_Zn_1
Selection: SEL{Ox*1000+Doma=1201}
Weight: None,,,
,,Variable: AG,,,
Total Number of Samples: 450212 Number of Selected Samples: 277
Statistics
VARIABLE,Min slice Y(m),Max slice Y(m),Count,Minimum,Maximum,Mean,Std.Dev.,Variance,Total Samples in Domain,Active Samples in Domain AG,
6780.00, 6840.00, 7, 3.0000, 52.5000, 23.4143, 16.8507, 283.9469, 10, 10 AG,
6840.00, 6900.00, 4, 4.0000, 5.5000, 4.9500, 0.5766, 0.3325, 13, 13 AG,
6900.00, 6960.00, 16, 1.0000, 37.0000, 8.7625, 9.0047, 81.0848, 29, 29 AG,
6960.00, 7020.00, 58, 3.0000, 73.5000, 10.6931, 11.9087, 141.8172, 132, 132 AG,
7020.00, 7080.00, 23, 3.0000, 104.5000, 15.3435, 23.2233, 539.3207, 23, 23 AG,
7080.00, 7140.00, 33, 1.0000, 15.4000, 3.8152, 2.8441, 8.0892, 35, 35 AG,
基本上我想从行VARIABLE,Min slice Y(m),Max slice Y(m)...
开始读取。我能想到几种解决方案,但不知道如何编程实现。有没有什么方法可以:
- 先读取CSV,并找出有多少行垃圾数据,然后重新读取并指定正确的跳过行数?或者
- 告诉
read.table
在找到列标题时开始读取(因为每个CSV的列标题都相同),并忽略此之前的所有内容?
readlLines
的调用中添加“n = 1000”以限制要读取的数据量,以确定需要跳过的标题。这样,较大的CSV文件不会被读取两次,而只会读取相关部分两次。这个1000行的边界有点武断,但似乎作为一个超过100行的标题有些奇怪。 - Paul Hiemstralist
读取是否比从磁盘读取更快的read.csv
吗?考虑到OP问题中的细节,添加n = 20
可能就足够了。 - A5C1D2H2I1M1N2O1R2T1