2017-08-07 7 views
0

dplyrに、aggregate()Rの集計に使用しています。私の現在の問題では、個人でグループ化したいが、1列(Number)の2番目に低いものと、もう1つ(Year)のうちの最低のものを見つける。だから、私のデータは次のように見える場合:集計/グループ_Rの2番目の最小値R

Number  Individual  Year  Value 
123  M. Smith  2010  234 
435  M. Smith  2011  346 
435  M. Smith  2012  356 
524  M. Smith  2015  432 
119  J. Jones  2010  345 
119  J. Jones  2012  432 
254  J. Jones  2013  453 
876  J. Jones  2014  654 

私はそれがなりたい:

Number  Individual  Year  Value 
435  M. Smith  2011  346 
254  J. Jones  2013  453 

ありがとうございました。

+2

を使用することができます。 2番目に低い列と最も低い列のどちらか? –

+0

@RonakShah申し訳ありません、これを表示するために編集されました。 –

+1

これは、1つが_lowest_の2番目で、もう1つが_highest_の2番目のように見えます。悲しいことに、私のRは、どちらかまたはあなたの質問に答えるほど強くない:-( –

答えて

3

dplyrパッケージを使用できます。 dt2が最終出力です。考え方は、Number列の最小値を除外し、データフレームをIndividual,Number、およびYearに配置することです。最後に、各グループの最初の行を選択します。

# Load package 
library(dplyr) 

# Create example data frame 
dt <- read.table(text = "Number  Individual  Year  Value 
123  'M. Smith'  2010  234 
       435  'M. Smith'  2011  346 
       435  'M. Smith'  2012  356 
       524  'M. Smith'  2015  432 
       119  'J. Jones'  2010  345 
       119  'J. Jones'  2012  432 
       254  'J. Jones'  2013  453 
       876  'J. Jones'  2014  654", 
       header = TRUE, stringsAsFactors = FALSE) 

# Process the data 
dt2 <- dt %>% 
    group_by(Individual) %>% 
    filter(Number != min(Number)) %>% 
    arrange(Individual, Number, Year) %>% 
    slice(1) 
1

私たちは、私にははっきりしていないdplyr

library(dplyr) 
df1 %>% 
    group_by(Individual) %>% 
    arrange(Individual, Number) %>% 
    filter(Number != max(Number)) %>% 
    slice(which.max(Number)) 
# A tibble: 2 x 4 
# Groups: Individual [2] 
# Number Individual Year Value 
# <int>  <chr> <int> <int> 
#1 254 J. Jones 2013 453 
#2 435 M. Smith 2011 346 
関連する問題