在r中导入文本文件
Importing text file in r
我有 26MB 的文本文件和 21 个变量,我尝试将数据导入为:
file<-read.table("file.txt", header=FALSE, sep="\t",skip=10)
出于某种原因,它加载了一个变量的数据。有什么建议吗?
我的 sessionInfo 看起来像:
sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
编辑:
以下是部分数据:
8760
201001010100
201001010100
00001 -9.0
00002 18
201001010100 00002 0.0000 100.0000 250.0000 500.0000 750.0000 1000.0000 1500.0000 2000.0000 3000.0000 4000.0000 5000.0000 6000.0000 7500.0000 8500.0000 10000.0000 12000.0000 15000.0000 18000.0000
201001010100 00002 86.8757 89.1179 90.9795 97.8640 99.0000 99.0000 99.0000 99.0000 99.0000 98.5143 86.4022 83.7819 63.1753 63.1753 15.9124 15.9124 0.500000 0.500000
201001010200 00002 91.2323 93.8417 95.9578 99.0000 99.0000 99.0000 99.0000 99.0000 99.0000 98.9829 88.4616 82.8682 59.4900 59.4900 16.8052 16.8052 0.500000 0.500000
201001010300 00002 94.3013 97.2262 99.0000 99.0000 99.0000 99.0000 98.6965 99.0000 99.0000 99.0000 87.7681 85.6374 51.5871 51.5871 19.4833 19.4833 0.500000 0.500000
201001010400 00002 95.2143 98.3831 99.0000 99.0000 98.9409 97.9819 99.0000 99.0000 98.6090 89.6825 85.1337 84.1001 47.7453 47.7453 20.1295 20.1295 0.500000 0.500000
201001010500 00002 94.9904 98.2644 99.0000 97.4757 94.7400 96.5887 99.0000 99.0000 98.1337 89.6765 88.0377 80.0048 47.3583 47.3583 23.5985 23.5985 0.500000 0.500000
你的号码好像不一样。文件中的列数(第 5 行中的 21 VS 第 5 行之后的行中的 20)。
与@thepule 的建议类似,使用 read.table
您可以完全省略 sep
参数,并且 read.table
通常会自动执行一些合理的操作,从而给您带来良好的结果。在您的情况下,省略第 1-5 行,这将导致 8 行包含 20 个变量:
> f <- read.table('file.txt', header=FALSE, skip=5)
> str(f)
data.frame': 8 obs. of 20 variables:
$ V1 : num 2.01e+11 2.01e+11 2.01e+11 2.01e+11 2.01e+11 ...
$ V2 : int 2 2 2 2 2 2 2 2
$ V3 : num 86.9 91.2 94.3 95.2 95 ...
[...]
设置 sep=''
,它会跳过列之间的所有空格,这对您的情况也适用。
编辑: 如果每行的列(=元素)数量不同,您可以考虑在 read.table
中设置 fill=T
。这将用空白字段填充缺失的信息 - 但请确保这是您实际想要做的。
PS: file
将是一个函数,因此我建议您为您的变量使用另一个名称。
我有 26MB 的文本文件和 21 个变量,我尝试将数据导入为:
file<-read.table("file.txt", header=FALSE, sep="\t",skip=10)
出于某种原因,它加载了一个变量的数据。有什么建议吗?
我的 sessionInfo 看起来像:
sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
编辑: 以下是部分数据:
8760
201001010100
201001010100
00001 -9.0
00002 18
201001010100 00002 0.0000 100.0000 250.0000 500.0000 750.0000 1000.0000 1500.0000 2000.0000 3000.0000 4000.0000 5000.0000 6000.0000 7500.0000 8500.0000 10000.0000 12000.0000 15000.0000 18000.0000
201001010100 00002 86.8757 89.1179 90.9795 97.8640 99.0000 99.0000 99.0000 99.0000 99.0000 98.5143 86.4022 83.7819 63.1753 63.1753 15.9124 15.9124 0.500000 0.500000
201001010200 00002 91.2323 93.8417 95.9578 99.0000 99.0000 99.0000 99.0000 99.0000 99.0000 98.9829 88.4616 82.8682 59.4900 59.4900 16.8052 16.8052 0.500000 0.500000
201001010300 00002 94.3013 97.2262 99.0000 99.0000 99.0000 99.0000 98.6965 99.0000 99.0000 99.0000 87.7681 85.6374 51.5871 51.5871 19.4833 19.4833 0.500000 0.500000
201001010400 00002 95.2143 98.3831 99.0000 99.0000 98.9409 97.9819 99.0000 99.0000 98.6090 89.6825 85.1337 84.1001 47.7453 47.7453 20.1295 20.1295 0.500000 0.500000
201001010500 00002 94.9904 98.2644 99.0000 97.4757 94.7400 96.5887 99.0000 99.0000 98.1337 89.6765 88.0377 80.0048 47.3583 47.3583 23.5985 23.5985 0.500000 0.500000
你的号码好像不一样。文件中的列数(第 5 行中的 21 VS 第 5 行之后的行中的 20)。
与@thepule 的建议类似,使用 read.table
您可以完全省略 sep
参数,并且 read.table
通常会自动执行一些合理的操作,从而给您带来良好的结果。在您的情况下,省略第 1-5 行,这将导致 8 行包含 20 个变量:
> f <- read.table('file.txt', header=FALSE, skip=5)
> str(f)
data.frame': 8 obs. of 20 variables:
$ V1 : num 2.01e+11 2.01e+11 2.01e+11 2.01e+11 2.01e+11 ...
$ V2 : int 2 2 2 2 2 2 2 2
$ V3 : num 86.9 91.2 94.3 95.2 95 ...
[...]
设置 sep=''
,它会跳过列之间的所有空格,这对您的情况也适用。
编辑: 如果每行的列(=元素)数量不同,您可以考虑在 read.table
中设置 fill=T
。这将用空白字段填充缺失的信息 - 但请确保这是您实际想要做的。
PS: file
将是一个函数,因此我建议您为您的变量使用另一个名称。