R-通过根据条件删除重复项来创建数据集-过滤器

时间:2018-10-15 10:04:00

标签: 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     

非常感谢。

1 个答案:

答案 0 :(得分:1)

听起来像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