0

我正在阅读有关 HTTP 访问日志的数据。我有一个文件,其中包含 IP 地址、年、月、日、小时和请求的 URL 列。我这样读文件:

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

这似乎有效。R-Studio 说 ipdata 是一个列表 [7] 并且 "names(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)

我会以正确的方式解决这个问题吗?我通常做的是将我的数据框包装在 table() 中,然后用 barplot 或 dotplot 它。R 是一个很好的方法吗?例如,我想说“在第 3 小时向我展示所有热门 URL”。或者“这个 IP 地址每小时显示多少次?”

更新看起来通过使用read.table而不是scan我能够获得数据框。显然扫描返回列表或其他东西的列表?绝对让像我这样的 n00b 感到困惑,但我现在感觉很好。

4

1 回答 1

0

如果你跑了

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

.... 您可能会看到它与您的 read.table() 操作的结果几乎相同。read.table是一个包装器scan并且做了很多格式化和一致性检查。

于 2012-04-05T16:20:24.503 回答