2012-04-05 68 views
0

我正在讀取有關HTTP訪問日誌的數據。我有一個包含IP地址,年,月,日,小時和請求URL的列的文件。我看到這樣的文件:通過掃描讀取數據後在R中設置數據幀

ipdata = scan(file="sample_r.log", what=list(ip="", year=0, month=0, day=0, hour=0, verb="", url="")) 

這似乎工作。 R-Studio中說,ipdata是一個列表[7]和 「名稱(ipdata)」 返回

[1] "ip" "year" "month" "day" "hour" "verb" "url" 

這樣顯得更酷。我想做一些有趣的事情,比如在某個特定小時圖表某些數據。我試着做一個子集:

s <- subset(ipdata, ipdata$hour==3) 

這個數據看起來與第一個數據幀有很大的不同。 s是一個列表[297275]及以下不工作的權利:

> table(ipdata$verb) 

GET POST 
2870709 1596748 

> table(s$verb) 
character(0) 

我要對這個正確的方法是什麼?我通常做的是將我的數據框包裹在表格中(),然後barplot或dotplot。 R是做這件事的好方法嗎?例如,我想說「在第3小時向我展示所有頂級網址」。或者「此IP地址每小時顯示多少次?」

更新它看起來像通過使用read.table而不是scan我能夠得到一個數據幀。顯然掃描返回列表或東西的列表?對於像我這樣的n00b而言,我絕對會感到困惑,但我現在感覺很好。

回答

0

如果運行

dat <- as.data.frame(ipdata) 
str(dat) 

....你可能會看到,這是幾乎相同的函數read.table的()操作的結果。 read.tablescan的包裝,並進行了很多格式化和一致性檢查。

+0

啊! 'read.table'在做完之後是否會做一個「as.data.frame」? – Dave 2012-04-05 19:15:34

+0

好吧,'read.table'分配「data.frame」作爲它返回的對象的類。它在分配類之前對名稱,長度和類進行了很多檢查。只需在控制檯輸入'read.table'。除了看到一致性執行的數量之外,您還會了解爲什麼它有時很慢。 – 2012-04-05 19:22:01

+0

太棒了,再次感謝。我仍然習慣於R和R Studio,並且今天早上了解到了幫助功能:) – Dave 2012-04-06 15:21:09