根据 R 中的日期序列填充行
Populate rows based on the date sequence in R
我有一个数据框,每行都有一个特定的日期范围。
stuID stdID roleStart roleEnd
1 1 7 2010-11-18 2020-06-14
2 2 2 2012-08-13 2014-04-01
3 2 4 2014-04-01 2015-10-01
4 2 3 2015-10-01 2018-10-01
5 2 6 2018-10-01 2020-06-14
6 3 4 2014-03-03 2015-10-01
我需要根据日期的周数生成行。准确地说,我需要根据给定数据框中两个日期之间的星期填充行。
我尝试使用以下代码实现此目的
extendedData <- reshape2::melt(setNames(lapply(1:nrow(df), function(x) seq.Date(df[x, "roleStart"],
df[x, "roleEnd"], by = "1 week")),df$stuID))
但是当我执行这个时,我收到了错误消息
Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument
这是数据框的结构
'data.frame': 350 obs. of 4 variables:
$ stuID : int 1 2 2 2 2 3 3 3 4 4 ...
$ stdID : int 7 2 4 3 6 4 3 6 1 2 ...
$ roleStart: Date, format: "2010-11-18" "2012-08-13" "2014-04-01" "2015-10-01" ...
$ roleEnd : Date, format: "2020-06-14" "2014-04-01" "2015-10-01" "2018-10-01" ...
谁能告诉我代码有什么问题?
提前致谢!!
这是使用 tidyverse
函数执行此操作的方法:
library(dplyr)
df %>%
mutate(date = purrr::map2(roleStart, roleEnd, seq, by = 'week')) %>%
tidyr::unnest(date)
就您的代码而言,它在这一步之前工作正常,即生成每周日期
lapply(1:nrow(df), function(x)
seq.Date(df[x, "roleStart"], df[x, "roleEnd"], by = "1 week"))
我不确定你想用那里的 setNames
和 melt
函数做什么。
我有一个数据框,每行都有一个特定的日期范围。
stuID stdID roleStart roleEnd
1 1 7 2010-11-18 2020-06-14
2 2 2 2012-08-13 2014-04-01
3 2 4 2014-04-01 2015-10-01
4 2 3 2015-10-01 2018-10-01
5 2 6 2018-10-01 2020-06-14
6 3 4 2014-03-03 2015-10-01
我需要根据日期的周数生成行。准确地说,我需要根据给定数据框中两个日期之间的星期填充行。
我尝试使用以下代码实现此目的
extendedData <- reshape2::melt(setNames(lapply(1:nrow(df), function(x) seq.Date(df[x, "roleStart"],
df[x, "roleEnd"], by = "1 week")),df$stuID))
但是当我执行这个时,我收到了错误消息
Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument
这是数据框的结构
'data.frame': 350 obs. of 4 variables:
$ stuID : int 1 2 2 2 2 3 3 3 4 4 ...
$ stdID : int 7 2 4 3 6 4 3 6 1 2 ...
$ roleStart: Date, format: "2010-11-18" "2012-08-13" "2014-04-01" "2015-10-01" ...
$ roleEnd : Date, format: "2020-06-14" "2014-04-01" "2015-10-01" "2018-10-01" ...
谁能告诉我代码有什么问题?
提前致谢!!
这是使用 tidyverse
函数执行此操作的方法:
library(dplyr)
df %>%
mutate(date = purrr::map2(roleStart, roleEnd, seq, by = 'week')) %>%
tidyr::unnest(date)
就您的代码而言,它在这一步之前工作正常,即生成每周日期
lapply(1:nrow(df), function(x)
seq.Date(df[x, "roleStart"], df[x, "roleEnd"], by = "1 week"))
我不确定你想用那里的 setNames
和 melt
函数做什么。