我想检查在当前行中引用的日期之前的任何日期,给定列中是否出现值。我将分享我的数据和尝试的内容。

这是我的数据框。

stocks <- tibble(
  time = as.Date('2009-01-01') + 0:9,
  X = round(rnorm(10, 20, 1)),
  Y = round(rnorm(10, 20, 2)),
  Z = round(rnorm(10, 20, 4))
)


对于初学者来说,我想看看是否可以做一个相对参考,并提取给定日期之前的所有值。

stocks %>%
  mutate(in_prev = paste0(stocks[stocks$time < time, ]$X, collapse = "/"))


我想得到的结果是

# A tibble: 10 x 5
   time           X     Y     Z in_prev
   <date>     <dbl> <dbl> <dbl> <chr>
 1 2009-01-01    20    19    24 ""
 2 2009-01-02    22    22    25 "20"
 3 2009-01-03    21    19    17 "20/22"
 4 2009-01-04    20    16    20 "20/22/21"


相反,我得到一个in_prev col为空的数据框。

我想将其转换为查询,以检查给定行中X的值是否出现在X列中是否有更早的日期。

最佳答案

library(dplyr)

set.seed(123)
stocks <- tibble(time = as.Date('2009-01-01') + 0:9,
                 X = round(rnorm(10, 20, 1)),
                 Y = round(rnorm(10, 20, 2)),
                 Z = round(rnorm(10, 20, 4)))

stocks %>%
  rowwise() %>%
  mutate(in_prevX = paste0(unique(stocks[stocks$time < time, ]$X), collapse = "/"))

#> Source: local data frame [10 x 5]
#> Groups: <by row>
#>
#> # A tibble: 10 x 5
#>    time           X     Y     Z in_prevX
#>    <date>     <dbl> <dbl> <dbl> <chr>
#>  1 2009-01-01    19    22    16 ""
#>  2 2009-01-02    20    21    19 19
#>  3 2009-01-03    22    21    16 19/20
#>  4 2009-01-04    20    20    17 19/20/22
#>  5 2009-01-05    20    19    17 19/20/22
#>  6 2009-01-06    22    24    13 19/20/22
#>  7 2009-01-07    20    21    23 19/20/22
#>  8 2009-01-08    19    16    21 19/20/22
#>  9 2009-01-09    19    21    15 19/20/22
#> 10 2009-01-10    20    19    25 19/20/22

07-28 03:02
查看更多