r - 基于R中的日期列创建具有重复值的新数据框

标签 r dataframe dplyr lubridate

我有一个非常基本的问题。我有以下带有两列的示例数据框; “日期”和“值”:

df <- structure(list(Date = structure(c(17075, 17083), class = "Date"), Value = c(0.16, 0.17)), row.names = c(NA, 2L), class = "data.frame")

我想创建一个新的数据框,其中包含特定日期周围的重复值。日期不应重复,而应根据重复值所采取的步骤数进行更改。

例如,对于上面的数据帧,如果我想在日期周围重复+-3步,那么输出数据帧应如下所示:

out <- structure(list(Date = structure(c(17072,17073,17074,17075,17076,17077,17078,17080,17081,17082,17083,17084,17085,17086 , class = "Date"), Value = c(0.16,0.16,0.16,0.16,0.16,0.16,0.16,0.17,0.17,0.17,0.17,0.17,0.17, 0.17)), row.names = c(NA, 14L), class = "data.frame")

我们怎样才能完成这个任务呢?我尝试使用代表功能,但对我不起作用。

最佳答案

如果我们的 n 为 3,我们可以使用 rowwise 并获取 seq 中“Date”的值 list 以及稍后unnest list

library(dplyr)
library(tidyr)
library(lubridate)
n <- 3
df %>% 
  rowwise %>%
  mutate(Date =  list(seq(Date - days(n), length.out = 2 *n +1, 
        by = 'day'))) %>% 
  ungroup %>%
  unnest(c(Date))

-输出

# A tibble: 14 x 2
#   Date       Value
#   <date>     <dbl>
# 1 2016-09-28  0.16
# 2 2016-09-29  0.16
# 3 2016-09-30  0.16
# 4 2016-10-01  0.16
# 5 2016-10-02  0.16
# 6 2016-10-03  0.16
# 7 2016-10-04  0.16
# 8 2016-10-06  0.17
# 9 2016-10-07  0.17
#10 2016-10-08  0.17
#11 2016-10-09  0.17
#12 2016-10-10  0.17
#13 2016-10-11  0.17
#14 2016-10-12  0.17

使用map可能会更快一点

library(purrr)
df %>%
  mutate(Date = map(Date, ~ seq(.x - days(n), 
            length.out = 2 * n + 1, by = 'day'))) %>% 
  unnest(Date)

关于r - 基于R中的日期列创建具有重复值的新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67665889/

相关文章:

r - 希望在 R 中的多列上转置数据框

r - 使用 xaringan 和 plotly 以编程方式在 R 中生成幻灯片

r - 空数据框的数据框列名

r - 当矢量化不可行时,在数据框中迭代行的 tidyverse 方法是什么?

r - 给定距离矩阵 256x256 的聚类

python - Pandas 成对算术类似于rolling().corr()

hadoop - 如何将大部分数据合并到 spark/Hive 中的单个目录中

r - 移动均值作为 dplyr 中的函数

r - dplyr 0.8.0 mutate_at : use of custom function without overwriting original columns

css - 不同地方的多个通知 Shiny 的应用程序