我使用group_by()
中的dplyr
或aggregate()
函数来汇总R
中的列。对于我目前的问题,我想按个人分组,但找到一列(Number)的第二低,另一列(Year)的最低。所以,如果我的数据是这样的:
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
谢谢。
答案 0 :(得分: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 :(得分: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