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

时间:2017-07-03 04:37:27

标签: r dataframe extraction

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

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

帮助!

1 个答案:

答案 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