r - 如何在R中的某些条件后获得x天
问题描述
我有一个包含多个日期和条件的数据集。我想提取所有以条件 place == "A" 开头的行和所有以 place == "A" 开始日期和最多 7 天后的行。例如:
Date Place Value1 Value2
2018-10-27 C 20 8
2018-10-29 A 10 5
2018-10-31 B 15 6
2018-11-4 C 17 9
2018-11-8 D 18 5
而且我要:
Date Place Value1 Value2
2018-10-29 A 10 5
2018-10-31 B 15 6
2018-11-4 C 17 9
如您所见,它必须在 7 天内提取具有 place == A 的第一行和所有行。第一天之后的地方像“A”没有意义,像“B”和“C”。它必须以“A”开头。它会跳过 2018-11-8,因为它距离 2018-10-29 超过 7 天。
我试过这样的问题:R: Extract data based on date, "if date less than",但我不知道如何提取 7 天。
解决方案
我们可以使用它match
来获取相应Date
的值并从中选择 7 天内的所有行。
library(dplyr)
df %>%
mutate(Date = as.Date(Date)) %>%
filter({tmp <- Date[match('A', Place)]
between(Date, tmp, tmp + 7)})
# Date Place Value Value.1
#1 2018-10-29 A 10 5
#2 2018-10-31 B 15 6
#3 2018-11-04 C 17 9
dplyr
允许在全局环境中不创建临时变量的情况下执行操作,上述解决方案可以用基础 R 编写为:
df$Date <- as.Date(df$Date)
date_val <- df$Date[match('A', df$Place)]
subset(df, Date >= date_val & Date <= date_val + 7)
数据
df <- structure(list(Date = structure(c(17831, 17833, 17835, 17839,
17843), class = "Date"), Place = c("C", "A", "B", "C", "D"),
Value = c(20L, 10L, 15L, 17L, 18L), Value.1 = c(8L, 5L, 6L,
9L, 5L)), row.names = c(NA, -5L), class = "data.frame")
推荐阅读
- r - 在 R 中手动引入数据的森林图
- css - Bootstrap 4:字体样式的覆盖不起作用
- azure - 为什么在我有应用网关时使用 azure APIM
- javascript - 如何使用jquery动态附加带有大写字母的html标签?
- typescript - 如何推断 Vue 3 组件中的 props 类型?
- kivymd - ValueError: MDLabel._text 只接受 str
- c - 我们可以编写一个只包含库调用的程序吗
- php - 如果主值相同,则合并数组
- android - 为了避免盗版,在应用中添加“应用内计费”而不是在 Play 商店中将其作为付费应用发布会更好吗?
- clang - freebsd12不能用clang工具AddressSanitizer检查内存泄漏?