1

我想在 R 中扩展一个网格,以便对一个变量的唯一值进行扩展,但对两个变量的联合值进行扩展。例如:

frame <- data.frame(id = seq(1:2),id2 = seq(1:2), year = c(2005, 2008))

我想扩展每年的框架,但是将 id 和 id2 一起考虑(例如(1,1)和(2,2)以生成如下输出:

  id id2 year
   1  1   2005
   1  1   2006
   1  1   2007
   1  1   2005
   2  2   2006
   2  2   2007
   2  2   2008

使用 expand.grid(),有人知道怎么做吗?在给定以下代码的情况下,我无法通过唯一地查看每个 id 并生成具有所有组合的框架来处理代码:

 with(frame, expand.grid(year = seq(min(year), max(year)), id = unique(id), id2 = unique(id2)))

感谢您的任何帮助。

4

2 回答 2

1

这是另一种使用方式base R

 indx <- diff(frame$year)+1
 indx1 <- rep(1:nrow(frame), each=indx)
 frame1 <- transform(frame[indx1,1:2], year=seq(frame$year[1], length.out=indx, by=1))
 row.names(frame1) <- NULL
  frame1
  #  id id2 year
  #1  1   1 2005
  #2  1   1 2006
  #3  1   1 2007
  #4  1   1 2008
  #5  2   2 2005
  #6  2   2 2006
  #7  2   2 2007
  #8  2   2 2008
于 2014-10-09T17:56:22.137 回答
1

你可以这样做reshape::expand.grid.df

require(reshape)
expand.grid.df(data.frame(id=1:2,id2=1:2), data.frame(year=c(2005:2008)))
> expand.grid.df(data.frame(id=1:2,id2=1:2), data.frame(year=c(2005:2008)))
  id id2 year
1  1   1 2005
2  2   2 2005
3  1   1 2006
4  2   2 2006
5  1   1 2007
6  2   2 2007
7  1   1 2008
8  2   2 2008
于 2014-10-09T17:19:51.833 回答