我试图从包含特定列中最低值的数据框中提取行:
income = c(2, 3, 5, 5, -15, 2, 1)
balance = c(15, 17, 20, 25, 30, 15, 17)
date = as.Date(c("2016/02/11", "2016/02/14", "2017/02/16", "2016/03/01", "2017/03/12", "2016/04/11", "2017/04/24"))
df = data.frame(income, balance, date)
现在我想从每个月获取包含最小"balance"
值的行,以便结果将是一个如下所示的数据框:
income balance date
1 2 15 2016-02-11
2 5 25 2016-03-01
3 2 33 2016-04-11
我尝试了聚合函数:
bymonth = aggregate(balance~months(date), data=df,FUN=min)
print(bymonth)
但这给了我以下输出:
months(date) balance
1 April 15
2 Februar 15
3 Marts 25
帮助!
答案 0 :(得分:0)
我们可以使用dplyr
。在按{'1}}'日期'进行分组后,我们months
具有slice
'余额'的行,并使用min
删除'mth'列
select
请注意,如果“余额”存在关联,请使用library(dplyr)
df %>%
group_by(mth = months(date)) %>%
slice(which.min(balance)) %>%
ungroup() %>%
select(-mth)
# A tibble: 3 x 3
# income balance date
# <dbl> <dbl> <date>
#1 2 15 2016-04-11
#2 2 15 2016-02-11
#3 5 25 2016-03-01
代替filter(balance == min(balance))
或者slice
来自ave
tp的base R
创建一个逻辑vector
并使用它来对'df'的行进行子集
df[with(df, ave(balance, months(date), FUN = min)==balance),]
# income balance date
#1 2 15 2016-02-11
#4 5 25 2016-03-01
#6 2 15 2016-04-11