我想检查在当前行中引用的日期之前的任何日期,给定列中是否出现值。我将分享我的数据和尝试的内容。
这是我的数据框。
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