R 中的聚合/Group_by 第二个最小值

a.p*_*ell 2 group-by r dataframe

我已经使用group_by()indplyraggregate()函数在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
Run Code Online (Sandbox Code Playgroud)

我希望它变成:

Number     Individual     Year     Value
435        M. Smith       2011     346
254        J. Jones       2013     453
Run Code Online (Sandbox Code Playgroud)

谢谢你。

www*_*www 5

我们可以使用这个dplyr包。dt2是最终的输出。想法是过滤掉Number列中的最小值,然后按IndividualNumber、 和排列数据框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)
Run Code Online (Sandbox Code Playgroud)