2017-09-07 10 views
1
のグループ化

私は次のようにデータセットを持っている:R - データ

Incoming_Day STU_ID 
1 2016-04-27 A033548 
2 2017-05-18 A034571 
3 2017-01-27 A034623 
4 2016-01-04 A100170 
5 2016-01-05 A100170 

私は毎日に対して、操作する生徒の数が表示されます、データフレームを作りたいです。

df <- aggregate(data.frame(count = df$STU_ID), list(Incoming_Day= df$Incoming_Day), length); df[1:5,] 

私が得る結果はそれぞれの日に対する観測の数であるしかし:

私は、次のコードを使用しています。私はここで簡単な間違いをしていると確信しています。どうすれば修正できますか?

+1

期待される出力を投稿してください – PoGibas

+0

@PoGibas: Incoming_Day No_Of_Students_Registration 1 2016年4月27日3 2 2017年5月18日5 3 2017年1月27日9 4 2016年1月4日6 5 2016年1月5日5 とso – Raj

+0

@Raj。 'dput(df)'を使って、スクリプトにロードされた元のdfから再現可能な例を抽出することができます。あるいは、非常に大きなサンプルがあり、最初の10行を取得したい場合は、 'dput(head(x = df、n = 10))'を使用します。 x引数はデータオブジェクトのためのもので、nはサンプリングする行数です。 – DataTx

答えて

2
aggregatedDF <- aggregate(data = df, STU_ID ~ Incoming_Day , 
          function(x) length(unique(x))) 
1

長続く(x)関数を使用してみてください(ユニーク(X))、このような:

aggregate(data.frame(count=df$STU_ID),list(Incoming_Day=df$Incoming_Day), 
      function(x) length(unique(x))) 

出力:

Incoming_Day count 
1 2016-01-04  1 
2 2016-01-05  2 
3 2016-04-27  1 
4 2017-01-27  1 
5 2017-05-18  1 

サンプルデータ:

df <- fread("Incoming_Day STU_ID 
      2016-04-27 A033548 
      2017-05-18 A034571 
      2017-01-27 A034623 
      2016-01-04 A100170 
      2016-01-05 A100170 
      2016-01-05 A100170 
      2016-01-05 A100172") 
+0

なぜ変数サブセットをリストとデータフレームに強制しなければならないのですか?あなたはそうすることなくあなたの出力を達成することができます。 – DataTx

+0

@DataTx - それは良い質問です。 aggregate()構文は、目的の出力に応じて、回答と同様に簡単にすることができます。私が使用する構文には2つの主な利点があります。(1)出力はデータフレームです。 (2)前記データフレームの列はカスタム名を有することができる。 – www

+0

@RyanRunge:これは80000行のうち上位5行にすぎず、複数のSTU_IDがあります。だから私はデータ値の任意の手動入力を使用することができます。 – Raj