r - R-通过根据条件删除重复项来创建数据集 - 过滤器
问题描述
我有一个数据框,每天都有几个价格。我想用以下代码修改我的数据框:
newdf <- Data %>%
filter(
if (Data$Date == Data$Echeance) {
Data$Close == lag(Data$Close,1)
} else {
Data$Close == Data$Close
}
)
但是,它并没有给我我想要的东西,那就是:创建一个新的数据框,其中变量Close
取其正常值,除非日期Date
等于Echeance
. 在这种情况下,取以下Close
值。我添加了过滤器,因为我想删除重复的日期,并且每天只保留一个Close
满足上述条件的日期。
没有错误消息,只是没有给我正确的数据库。
这是我的数据的一瞥:
Date Echeance Compens. Open Haut Bas Close
1 1998-03-27 00:00:00 1998-09-10 00:00:00 125. 828 828 820 820. 197
2 1998-03-27 00:00:00 1998-11-10 00:00:00 128. 847 847 842 842. 124
3 1998-03-27 00:00:00 1999-01-11 00:00:00 131. 858 858 858 858. 2
4 1998-03-30 00:00:00 1998-09-10 00:00:00 125. 821 821 820 820. 38
5 1998-03-30 00:00:00 1998-11-10 00:00:00 129. 843 843 843 843. 1
6 1998-03-30 00:00:00 1999-01-11 00:00:00 131. 860 860 860 860. 5
提前非常感谢。
解决方案
听起来像是 , 的用ifelse
例dplyr
:
library(dplyr)
Data %>%
mutate(Close = ifelse(Date==Echeance, lead(Close,1), Close))
这里有一个例子:
dat %>%
mutate(var_new = ifelse(date1==date2, lead(var,1), var))
# A tibble: 3 x 4
# date1 date2 var var_new
# <date> <date> <int> <int>
# 1 2018-03-27 2018-03-27 10 11
# 2 2018-03-28 2018-01-01 11 11
# 3 2018-03-29 2018-02-01 12 12
该函数lead
将向量移动 1 个位置。另请注意,我创建了一个var_new
只是为了显示差异,但您可以直接变异var
。
使用的数据:
dat <- tibble(date1 = seq(from=as.Date("2018-03-27"), to=as.Date("2018-03-29"), by="day"),
date2 = c(as.Date("2018-03-27"), as.Date("2018-01-01"), as.Date("2018-02-01")),
var = 10:12)
dat
# A tibble: 3 x 3
# date1 date2 var
# <date> <date> <int>
# 1 2018-03-27 2018-03-27 10
# 2 2018-03-28 2018-01-01 11
# 3 2018-03-29 2018-02-01 12
推荐阅读
- python - ipdb 和 pytest:源代码不可用
- microsoft-teams - 视频和音频通话的 Microsoft Teams 深度链接失败
- java - 在 Android Studio 中设置警报对话框的文本长度
- java - Checker 框架 - 运行时保留
- r - SVM::train 中的错误 - 缺少所有准确度指标值
- javascript - Discord.js 无法读取未定义的属性“活动”
- rust - ds 寄存器在新的内联汇编中无效
- javascript - 是否可以在不使用 dangerouslySetInnerHtml 的情况下渲染 HTML
- python - 如何在sql server中更新python?
- heroku - Apollo monorepo - WS 连接