考虑表单的数据框架
idnum start end
1993.1 17 1993-01-01 1993-12-31
1993.2 17 1993-01-01 1993-12-31
1993.3 17 1993-01-01 1993-12-31
Run Code Online (Sandbox Code Playgroud)
有start
和end
类型Date
$ idnum : int 17 17 17 17 27 27
$ start : Date, format: "1993-01-01" "1993-01-01" "1993-01-01" "1993-01-01" ...
$ end : Date, format: "1993-12-31" "1993-12-31" "1993-12-31" "1993-12-31" ...
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的数据帧,而不是每行的每月观察,中间的每个月start
和end
(包括边界):
期望的输出
idnum month
17 1993-01-01
17 1993-02-01
17 1993-03-01
...
17 1993-11-01
17 1993-12-01
Run Code Online (Sandbox Code Playgroud)
我不确定month
应该采用什么格式,我会在某些时候想要分组idnum
,month
以便对其余数据集进行回归. …
我正在尝试将一个变量记录到一个年度数据集中,该变量每单位记录一次。虽然重复观察n次非常简单,但是我很难为观察分配数年。
我的数据结构如下:
id startyear endyear dummy
1 1946 2005 1
2 1957 2005 1
3 1982 2005 1
4 1973 2005 1
Run Code Online (Sandbox Code Playgroud)
我想做的是创建一个名为的新行years
,该行重复1 n = 2005 - 1946 = 59
次;单位2 2005-1957
次,以此类推并指定年份,从而产生以下输出:
id startyear endyear dummy year
1 1946 2005 1 1946
1 1946 2005 1 1947
1 1946 2005 1 1948
1 1946 2005 1 1949
[…]
Run Code Online (Sandbox Code Playgroud)
我试图使用slice
和mutate
在dplyr,结合rep
和seq
,但没有给我我想要的结果。任何帮助将不胜感激。
我有日期范围,由两个变量(id
和type
)分组,这两个变量当前存储在一个名为的数据框中data
.我的目标是扩展日期范围,以便我在日期范围内每天都有一行,其中包括相同的id
和type
.
以下是重现数据框示例的代码段:
data <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), type = c("a",
"a", "b", "c", "b", "a", "c", "d", "e", "f"), from = structure(c(1235199600,
1235545200, 1235545200, 1235631600, 1235631600, 1242712800, 1242712800,
1243058400, 1243058400, 1243231200), class = c("POSIXct", "POSIXt"
), tzone = ""), to = structure(c(1235372400, 1235545200, 1235631600,
1235890800, 1236236400, 1242712800, 1243058400, 1243231200, 1243144800,
1243576800), class = c("POSIXct", "POSIXt"), tzone = "")), .Names = c("id", …
Run Code Online (Sandbox Code Playgroud) 我有以下输入数据框:
df <- data.frame(x=c('a','b','c'),y=c(4,5,6),from=c(1,2,3),to=c(2,4,6))
df
x y from to
1 a 4 1 2
2 b 5 2 4
3 c 6 3 6
Run Code Online (Sandbox Code Playgroud)
现在我想扩展每一行,从和之间的值,即('a',4)跨越两行,即1,2
.预期结果如下所示:
exp <- data.frame(x=c('a','a','b','b','b','c','c','c','c'),
y=c(4,4,5,5,5,6,6,6,6),
z=c(1,2,2,3,4,3,4,5,6))
exp
x y z
1 a 4 1
2 a 4 2
3 b 5 2
4 b 5 3
5 b 5 4
6 c 6 3
7 c 6 4
8 c 6 5
9 c 6 6
Run Code Online (Sandbox Code Playgroud)
在没有循环的情况下实现这一目标的最惯用的方法是什么?