在R中提取时间序列中的行

Extracting row in time series in R

我正在尝试从包含特定列中最低值的数据框中提取行:

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

求助!

我们可以 dplyr。按 'date' 的 months 分组后,我们 slice 具有 min 'balance' 的行并使用 [=16= 删除 'mth' 列]

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

请注意,如果 'balance' 并列,则使用 filter(balance == min(balance)) 代替 slice


或者使用 base R 中的 ave tp 创建一个逻辑 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