R - 具有来自另一个数据帧的序列的数据帧

标签 r dataframe date seq

我有一个这样的数据框:

source_data <-
  data.frame(
    id = c(seq(1,3)),
    start = c(as.Date("2020-04-04"), as.Date("2020-04-02"), as.Date("2020-04-03")),
    end = c(as.Date("2020-04-08"), as.Date("2020-04-05"), as.Date("2020-04-05"))
  )

我想在开始日期和结束日期之间的每一天为每个 id = crate 创建一个日期序列,并将其放入另一个数据框。所以结果应该是这样的:

result <-
  data.frame(
    id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3),

    date = c(
      as.Date("2020-04-04"),
      as.Date("2020-04-05"),
      as.Date("2020-04-06"),
      as.Date("2020-04-07"),
      as.Date("2020-04-08"),

      as.Date("2020-04-02"),
      as.Date("2020-04-03"),
      as.Date("2020-04-04"),
      as.Date("2020-04-05"),

      as.Date("2020-04-03"),
      as.Date("2020-04-04"),
      as.Date("2020-04-05")
    )
  )

我从这个日期序列开始,但如何在那里加入我的 source_data 数据框?

solution <-
  data.frame(
    date = seq(min(source_data$start), max(source_data$end), by = 1)
  )

最佳答案

我们可以使用 map2 来创建每个对应的 'start', 'end' 日期之间的序列,然后 unnest list

library(dplyr)
library(purrr)
library(tidyr)
source_data %>%
    transmute(id, date = map2(start, end, seq, by = '1 day')) %>%
    unnest(c(date))
# A tibble: 12 x 2
#      id date      
#   <int> <date>    
# 1     1 2020-04-04
# 2     1 2020-04-05
# 3     1 2020-04-06
# 4     1 2020-04-07
# 5     1 2020-04-08
# 6     2 2020-04-02
# 7     2 2020-04-03
# 8     2 2020-04-04
# 9     2 2020-04-05
#10     3 2020-04-03
#11     3 2020-04-04
#12     3 2020-04-05

或者使用data.table

library(data.table)
setDT(source_data)[, .(date = seq(start, end, by = '1 day')), by = id]

base R

的附加选项
lst1 <- Map(seq, source_data$start, source_data$end, MoreArgs = list(by = '1 day'))
data.frame(id = rep(source_data$id, lengths(lst1)), date = do.call(c, lst1))

关于R - 具有来自另一个数据帧的序列的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61107263/

相关文章:

arrays - r 中的列表数组

python - 如何从旧数据框创建新数据框?

python - Pandas - 如何创建一个新列,该新列从前一行或下一行(如果第一行)的列中获取值

php - 通过日期按年份搜索(仅 'date' ,不是时间戳或其他),PHP 通过从变量传递

r - 找出 2 个表 (`tbl_spark` ) 是否相等而不使用 sparklyr 收集它们

r - 如何在markdown中部署kable table Latex格式

java - Oracle 日期文字 [DD-MON-RR HH.MI.SSXFF AM]

javascript - 让 JavaScript 随机报价生成器每天只生成一个报价

r - 如何使用 rollapply 根据 R 中另一列的值标记一列的值?

python - pandas to_html 无值表示