2011-12-02 41 views
1

我是R的新手,我试图读取数据集。该数据集是在这里:将数据集读入R时遇到问题

http://petitlien.fr/myfiles

(以上链接将扩大到GMX文件存储文件夹的链接,然后点击来宾访问检索文件。)

的mydata.log文件命名有32个没有标题的条目,它由2个由空格分隔的列组成。

我想要的功能强大的命令scan

test.frame<-scan(file="mydata.log",sep= "", nlines=32,blank.lines.skip=TRUE) 

以上刚读第3行:

head(test.frame) 
[1] 0.0000 0.0000 144.3210 0.3400 159.4070 0.8925 

我也read.table尝试:

test.frame<-read.table(file="mydata.log",sep= "", nrows=32,blank.lines.skip=TRUE) 

这一个读前6行只有如下所示:

names(test.frame) 
[1] "V1" "V2" 
> head(test.frame) 
    V1  V2 
1 0.000 0.0000 
2 144.321 0.3400 
3 159.407 0.8925 
4 198.413 0.9450 
5 222.557 0.9975 
6 235.464 1.0500 

有人知道如何正确读取此数据集吗?

一个相关的问题:我可以控制正在读入的数据中的有效位数或小数位数吗?

非常感谢......

+2

你的'read.table'调用读取数据就好了(尽管你可以简化对'read.table(“mydata.log”,header = FALSE )'。如果它是你不喜欢的默认列名,你可以用'names(test.frame)< - c(“BigNumbers”,“SmallNumbers”)'来改变它们。(你知道'head '是一个函数,默认情况下只显示前六行?) –

+0

@ Josh感谢您的评论。不,我没有意识到前6行的默认输出。1 vote up – yCalleecharan

+0

@yCalleecharan +1格式很好的问题,by很容易理解你想要什么以及问题出在哪里,“R”是一种学习的痛苦,但是试着去享受这个过程,并且知道一路上会有很多乐趣! –

回答

2

代码的这行完美的作品:

test.frame<-read.table(file="mydata.log",sep= "", nrows=32,blank.lines.skip=TRUE)

你之所以只得到6线在你的输出是因为你使用head。查看所有行,只需输入您的对象的名称:

> test.frame 
      V1  V2 
1  0.000 0.0000 
2  144.321 0.3400 
3  159.407 0.8925 
4  198.413 0.9450 
5  222.557 0.9975 
6  235.464 1.0500 
7  296.918 1.1025 
8  346.773 1.1550 
9  442.955 1.2075 
10 694.879 1.2600 
11 892.436 1.3125 
12 1492.970 1.3650 
13 2916.960 1.4175 
14 3596.060 1.4700 
15 5278.950 1.5225 
16 7480.730 1.5750 
17 12259.800 1.6275 
18 14032.600 1.6800 
19 19565.600 1.7325 
20 31427.700 1.7850 
21 58221.400 1.8375 
22 92283.900 1.9900 
23 165601.000 1.9425 
24 165703.000 1.9950 
25 213925.000 2.8750 
26 260381.000 2.1000 
27 312701.000 2.1525 
28 370853.000 2.2050 
29 479303.000 2.2575 
30 487265.000 2.3100 
31 545225.000 2.3625 
32 703186.000 2.4150 

这里是看你多少行(有用的,当你有很多的意见)一个简单的方法:

nrow(测试.frame) [1] 32

至于的位数,请参阅round命令。要查看的文档的命令,输入?,然后命令,在这种情况下,一个功能:在上述?round

#note that you do not have to put "digits=2", you can just put "2", but this way is clearer 
> rounded_test.frame <- round(test.frame, digits=2) 
> rounded_test.frame 
      V1 V2 
1  0.00 0.00 
2  144.32 0.34 
3  159.41 0.89 
4  198.41 0.94 
5  222.56 1.00 
6  235.46 1.05 
7  296.92 1.10 
8  346.77 1.16 
9  442.95 1.21 
10 694.88 1.26 
11 892.44 1.31 
12 1492.97 1.36 
13 2916.96 1.42 
14 3596.06 1.47 
15 5278.95 1.52 
16 7480.73 1.57 
17 12259.80 1.63 
18 14032.60 1.68 
19 19565.60 1.73 
20 31427.70 1.78 
21 58221.40 1.84 
22 92283.90 1.99 
23 165601.00 1.94 
24 165703.00 2.00 
25 213925.00 2.88 
26 260381.00 2.10 
27 312701.00 2.15 
28 370853.00 2.21 
29 479303.00 2.26 
30 487265.00 2.31 
31 545225.00 2.36 
32 703186.00 2.42 

注意我创造的,而不是替换当前的新对象。如果你想更换当前的和永远失去的数据(!直到你重装过程的数据集),那么你可以使用此行:

test.frame <- round(test.frame, digits=2) 

如果你真的不想要压缩您的号码,你可能只是有兴趣查看四舍五入的数字。你可以做到这一点下面的命令:

print(test.frame,digits=2) 
+0

@徐谢谢。它完美的作品。 1 vote up – yCalleecharan

+1

您也可以指定想要显示多少行()。例如:head(test.frame,10)查看前10行。 – neilfws

+0

@neilfws谢谢。这是有用的信息。 1投票。 – yCalleecharan

1

相反的nrow()的建议,我会建议为您提供有关数据集的更多有用信息(类变量等)str()(“结构”)。它也有点神秘...... :)

+0

@ jans谢谢。我知道这个命令'str()'。 1投票 – yCalleecharan