統計用プログラミング言語Rについての質問です。文字列(例えば、IPアドレス)がならんでいるテキストファイルがあったときにそれを読み込んで、どのIPアドレスが何個あるというのを手軽にRでやりたいのですが、どうするといいのでしょうか? IPアドレスのテキストファイルは、ip.csv とした例お願いします。read.csv('ip.csv',header=FALSE)で読み込んでからどうするといいのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/06/29 14:32:08
  • 終了:2010/07/06 14:35:02

回答(2件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912010/06/30 23:57:49

ポイント35pt

R は以前から興味があったので、試しがてらにやってみました。


いろいろとサイトやマニュアルを見てみましたが、数値の解析は得意な

ようですが、あまり文字列処理は得意ではないようです。

一応サンプルを作成してみましたが、ベタなループ処理で、R ならでは

処理にはなっていません(数値なら、hist などの関数が使えそうですが)。


また、csv といってもファイルにどのように格納されているかによって、

処理は変わってきますが今回は1行1アドレスが書かれたデータを想定しました。


ips<-read.csv('C:\\ip.csv',header=FALSE)

for( xx in unique(ips[,1]) ){
  cc <- 0
  for ( yy in ips[,1] ) {
    if( xx == yy ) {
        cc <- cc + 1
	}
  }
  cat(xx,cc,"\n") 
}

で一応行ごとをデータとして、頻度をカウントします。

http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html


他のサイトに hash を使った例がありましたので、こちらの方が処理が早いかもしれません。

http://siguniang.wordpress.com/2010/06/10/r%E6%96%87%E5%AD%97%E6...

id:kaiketsu

うーん こんな単純なことなのですが、うまくできないのですね。。。。

2010/07/01 09:36:42
id:azgrove No.2

azgrove回答回数1ベストアンサー獲得回数02010/07/01 21:50:07

ポイント35pt

ips というデータフレームにデータが入ってるなら

table(as.matrix(ips))

でできますよ

http://cse.naro.affrc.go.jp/takezawa/r-tips/r/61.html

id:kaiketsu

IP アドレス 集計数 の形にしたいのですが、table だと、表になってできますね。なんでこんなに単純なことが難しいのだろう。

2010/07/02 00:54:19
  • id:kaiketsu
    集計用関数あるようですね。

    http://www.statmethods.net/management/aggregate.html
  • id:Mook
    上記のリンク先の aggregate や 解析用の summarize といった関数は、数値用の関数です。
    ># for numeric variables

    データが数値だったら、いろいろと関数はあるのですけれどね。



    上の回答ではうまくいかなかったでしょうか。
    データの内容を例示いただけると、何かアドバイスできるかもしれません。
    こちらでは一応動作したコードです。
  • id:kaiketsu
    数を数えるだけなんですけど、面倒なんですね。ありがとうございます。
  • id:Mook
    全然別のソフトですけれど、Windows であれば LogParser を使えばコマンド一行でできます。
    http://technet.microsoft.com/ja-jp/scriptcenter/dd919274.aspx

    ファイルやログなどを SQL で解析できるので、とても手軽です。
    質問の内容でしたら、下の一行で出せます。
    >LogParser -i:CSV -headerRow:off "SELECT Field1,Count(*) FROM 'C\ip.csv' GROUP By Field1"

  • id:kaiketsu
    この程度のことがRだと難しいのですね。多くの人は単純集計しかしないのだと思うのですが。。。
  • id:azgrove
    実行してみましたか?
    IPアドレス 集計数 って

    アドレス1 10
    アドレス2 15
    ...

    ということですよね?
    table(as.matrix(...)) で出力されますよ。
    実際は
    アドレス1 アドレス2
      10    15  ...
    となると思いますが。
    縦に並べたいならこの出力をdata.frame(出力) とすればいい

    またRは自分の望む形に整形するのには向いてないので、
    計算結果をExcelとかにコピペするのがいいかもしれませんが


  • id:kaiketsu
    あとは、降順でソートして、上位10個くらい表示したいのですが、どう書くといいんでしょうか?
    降順でソートは http://d.hatena.ne.jp/kkobayashi_a/20070706/p2 でいいのですが、上位10個のみ表示はどうするんでしょうか
  • id:kaiketsu
    おっと、ここに書いてあるように、
    c[1,2,3,4]と書けばいいのですね。
  • id:Mook
    おお、やっぱりできるんですね。
    勉強になりました。

    今回の質問は、Rを始めるいいきっかけになりました。
    こちらについても、ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません