2011-12-02 83 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