我正在阅读有关 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 感到困惑,但我现在感觉很好。