2016-10-13 7 views
-1

でのカウントに列をグループ化するので、私はだから私は、次の質問を持っているデータフレーム内の合計でこれらの4つの異なるcolsのはRのデータフレーム

 port   ip    service  numberOfTimes 
1  22   11.11.79.100   ssh   16 
2  80   11.11.79.100   www   19 
3  111  11.13.79.110   ipw   21 
4  123  11.13.79.110   ssh   50 
5  22   64.50.80.140   cde   45 
6  80   64.50.80.140   www   16 
7  22   71.11.64.100   ssh   234 
8  80   71.11.64.100   you   33 
9  22   100.15.31.1    ssh   99 
10 41   120.15.31.12   has   19 

を持っていますそのようなものになることができるように?

port  ip(count of same ip) service  numberOfTimes 
22    4     ssh   399 (#1+#5+#7+#9) 
80    3     www   68 (#2+#6+#8) 

後ようにしてそうdplyrを使用して、ポート

+0

すでに 'dplyr'というタグが付いているので、' group_by() 'と' summarize() '関数を見たと思います。あなた自身でこれを解決しようとしましたか?どのようなコードを書いたのですか? – MrFlick

+0

こんにちは@MrFlick正直言って。私は、本当にひっくり返されています。 dtを試したかったのですが、group_by(port、service)%>%summarize(numberOfTimes = sum(numberOfTimes))は動作しませんでした。グループ化変数を変更できないというエラーがありました。しかし、私はそれらをまとめても、各行にリンクされているIPアドレスはどうなりますか?私は本当に始める方法にこだわった。それぞれの行は別のものに依存するように感じるので – user127886

答えて

2

の残りのため、これは非常に簡単です:

サンプルデータのためにあなたが含ま
testData %>% 
    group_by(port, service) %>% 
    summarise(`Number of IPs` = n_distinct(ip) 
      , `Total number of times` = sum(numberOfTimes)) 

与える:

port service `Number of IPs` `Total number of times` 
    <int> <chr>   <int>     <int> 
1 22  cde    1      45 
2 22  ssh    3      349 
3 41  has    1      19 
4 80  www    2      35 
5 80  you    1      33 
6 111  ipw    1      21 
7 123  ssh    1      50 

何らかのエラー(コメントの中で言及されている)がある場合は、そのエラーを実際に引き起こすデータを提供してから、人々があなたを助ける必要があります。

+0

ああ!私は完全にdplyrのユニークさと長さの機能について忘れてしまった、助けてくれてありがとう。 – user127886

+0

それはあなたのために働いてうれしい。しかし、「ユニーク」でも「長さ」も「dplyr」からのものではない。 –

+1

'n_distinct(ip)'を使うこともできます。これは 'length(unique(ip)) 'より速いと思われます。 – Scarabee