r - R函数过滤掉每日数据
问题描述
我有以下数据框
Fruit Date Price
Banana 01-01-2019 1
Banana 10-01-2019 1
Banana 31-01-2019 3
Banana 01-02-2019 4
Banana 04-03-2019 5
Banana 05-04-2019 6
Banana 30-04-2019 6
Apple 07-08-2020 7
Apple 08-09-2020 9
Apple 09-09-2020 9
Apple 20-09-2020 10
Apple 31-12-2020 11
Berries 30-01-2018 9
Berries 02-02-2018 14
Berries 07-03-2018 11
Berries 09-03-2018 10
对于给定的水果,我想只计算一个月的数字,即:
Fruit Date Price
Banana 31-01-2019 3
Banana 01-02-2019 4
Banana 04-03-2019 5
Banana 30-04-2019 6
Apple 07-08-2020 7
Apple 20-09-2020 10
Apple 31-12-2020 11
Berries 30-01-2018 9
Berries 02-02-2018 14
Berries 09-03-2018 10
这将给我每个月底水果的最终价格。
我不确定要应用哪个库/代码,因为我是 R 的初学者。
谢谢!
解决方案
我们可以将“日期”转换为Date
类,按“水果”分组,year
“month
日期”,得到带有max
日期的行
library(dplyr)
library(lubridate)
df1 %>%
mutate(Date = dmy(Date)) %>%
group_by(Fruit, year = year(Date), month = month(Date)) %>%
slice_max(Date) %>%
ungroup %>%
select(-year, - month)
-输出
# A tibble: 10 x 3
# Fruit Date Price
# <chr> <date> <int>
# 1 Apple 2020-08-07 7
# 2 Apple 2020-09-20 10
# 3 Apple 2020-12-31 11
# 4 Banana 2019-01-31 3
# 5 Banana 2019-02-01 4
# 6 Banana 2019-03-04 5
# 7 Banana 2019-04-30 6
# 8 Berries 2018-01-30 9
# 9 Berries 2018-02-02 14
#10 Berries 2018-03-09 10
或者另一种选择是data.table
library(data.table)
i1 <- setDT(df1)[, Date := mdy(Date)][, .I[which.max(Date)],
.(Fruit, year(Date), month(Date))]$V1
df1[i1]
数据
df1 <- structure(list(Fruit = c("Banana", "Banana", "Banana", "Banana",
"Banana", "Banana", "Banana", "Apple", "Apple", "Apple", "Apple",
"Apple", "Berries", "Berries", "Berries", "Berries"), Date = c("01-01-2019",
"10-01-2019", "31-01-2019", "01-02-2019", "04-03-2019", "05-04-2019",
"30-04-2019", "07-08-2020", "08-09-2020", "09-09-2020", "20-09-2020",
"31-12-2020", "30-01-2018", "02-02-2018", "07-03-2018", "09-03-2018"
), Price = c(1L, 1L, 3L, 4L, 5L, 6L, 6L, 7L, 9L, 9L, 10L, 11L,
9L, 14L, 11L, 10L)), class = "data.frame", row.names = c(NA,
-16L))
推荐阅读
- javascript - 确保一个带有异步调用的 forEach 在另一个之前执行?
- javascript - 使用three.js在不同坐标显示文本
- c# - 为什么 GetUsersInRoleAsync 方法仅适用于 .cshtml?
- r - 使用对数转换后将 ggplot 比例标签更改为原始值
- html - 将 div 向左和居中对齐
- javascript - 以 html 输出时,Bootstrap 弹出框不起作用
- android - Webview 和 iFrame 视频全屏问题
- axios - Nuxt Axios 模块读取状态码
- javascript - 升级到 webpack 4,导入不起作用
- angular - 在角度 5 和材料中使用错误处理程序时,Snackbar 位置错误