在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
我正在尝试从包含特定列中最低值的数据框中提取行:
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