2017-07-09 16 views
4

私はGROUP_BY機能を使用してグループ化、およびR.にグループ化とR

MM_group<-group_by(SYC,Method,Maturity) 

私のデータセットをまとめる機能を使用して、それをまとめた本のように見えるのですデータフレームを持って、

で他の列を維持することによってまとめ
Year   Group County Seed.Brand Seed.Variety Seed.Maturity 
1 2014 Group 0 No-till Yankton  Asgrow  AG0832   0.8 
2 2014 Group 0 No-till Brown  Asgrow  AG0934   0.9 
3 2014 Group 0 No-till Brown  Asgrow  AG0934   0.9 
4 2014 Group 0 No-till Brown  Asgrow  AG0934   0.9 
5 2014 Group 0 No-till Brown Pioneer  90Y90   0.9 
6 2014 Group 0 No-till Brown  Asgrow  AG0934   0.9 

Yield Method Maturity digits 
1 73.23 No-till  0  0 
2 65.14 No-till  0  0 
3 63.63 No-till  0  0 
4 61.57 No-till  0  0 
5 60.20 No-till  0  0 

私はグループ化方法が&です。私はメソッド&成熟度組み合わせの最大収量のために郡と年を取得しようとしています。

summarize(MM_group,Max_Yield=max(Yield)) 

     Method Maturity Max_Yield 
      <chr> <chr>  <dbl> 
1  Irrigated  0 69.600 
2  Irrigated  1 86.013 
3  Irrigated  2 88.750 
4  Irrigated  3 79.650 
5  No-till  0 79.470 
6  No-till  1 79.856 
7  No-till  2 85.860 
8  No-till  3 68.530 
9 Non-irrigated  0 83.210 
10 Non-irrigated  1 81.916 
11 Non-irrigated  2 103.740 
12 Non-irrigated  3 94.410 

しかし、これは私の郡の名前と年を与えるものではありません:

は、私は次のように行われています。私はcbindやjoinを使ってそのデータを得ることができますが、これを行うもっと簡単な方法があるのか​​疑問に思っています。

予想される出力:

  Method Maturity Max_Yield Year     Group 
      <chr> <chr>  <dbl> <int>     <fctr> 
1  Irrigated  0 69.600 2012 Group 0 or 1 Irrigated 
2  Irrigated  1 86.013 2012 Group 0 or 1 Irrigated 
3  Irrigated  2 88.750 2013 Group 2 or 3 Irrigated 
4  Irrigated  3 79.650 2013 Group 2 or 3 Irrigated 
5  No-till  0 79.470 2013  Group 0 No-till 
6  No-till  1 79.856 2012  Group 1 No-till 
7  No-till  2 85.860 2013  Group 2 No-till 
8  No-till  3 68.530 2014  Group 3 No-till 
9 Non-irrigated  0 83.210 2013 Group 0 Non-irrigated 
10 Non-irrigated  1 81.916 2012 Group 1 Non-irrigated 
11 Non-irrigated  2 103.740 2014 Group 2 Non-irrigated 
12 Non-irrigated  3 94.410 2014 Group 3 Non-irrigated 
+0

http://www.sdsoybean.org/programs-events/yield-contest/ここでデータセット全体を見つけることができるはずです – Kasi

+0

そのリンクから、データはどこですか?それは農業のデータですか? – akrun

+0

はい、そうです。しかし、私のデータは、すべての年の編集です。 – Kasi

答えて

5

を使用することができます。

+0

これは魅力のように機能します!これは私が探していたものです。インデックスのようなランク関数を使用する素晴らしい方法。 – Kasi

+0

@ Kasi関数* rank *を使用していません。新しい列の名前にすぎません。代わりに* foo *を使用できますが、それでも機能します。名前*ランク*は名前の悪い選択だと思う、私の間違い。 –

3

我々は次のようにあなたがarrangeslice方法を使用することができます

summarize(MM_group, 
      rank = which.max(Yield), 
      Year_rank = Year[rank], 
      County_rank = County[rank]) 
+0

メソッドと成熟度の列で最大の収量が必要なため、それは動作しません。あなたの方法は、基本的に4つの属性をグループ化し、最大値を見つけることです。私は郡と年の列を追加しようとしています。 'test <-left_join(MM_max、Data、by = c( 'Method' = 'Method'、 'Maturity' = 'Maturity'、 'Max_Yield' = 'Yield'))'のようなものです。 – Kasi

+0

@カシ私も別の方法がありました。あなたの小さな例に基づいて、どのような出力が期待されるべきかは明らかではありません。それぞれの '郡'、 '年'に同じ 'メソッド'があるとしたら、 'left_join'は機能しません。 – akrun

+0

@Kasiちょっとした再現可能な例と、わずか4行ではなく予想される出力を表示してください – akrun

3

を試してみてください

SYC %>% 
    group_by(Method, Maturity) %>% 
    slice(which.max(Yield)) %>% 
    rename(Max_Yield = Yield) %>% 
    select(Method, Maturity, Max_Yield, Year, Group) 
関連する問題