将data.frame扩展为不同的行

时间:2016-06-01 21:07:21

标签: r dataframe

我试图找出如何将R中的data.frame扩展为不同的行。这样,我的意思是使用startyear和toyear变量来创建年度data.frame,其中id被复制为从startyear到= endyear的序列中的每个不同年份。

我有一个示例data.frame:

testdat <- data.frame(id=seq(1,10),
           startyear=c(1946,1960,1965,1976,1955,1999,2013,1981,1983,1995)
           )

testdat$endyear <- testdat$startyear+sample(1:10,10,replace=TRUE)

这会创建:

  id startyear endyear
1  1      1946    1951
2  2      1960    1966
3  3      1965    1969
.  .      ....    ....

我想要的结果是:

id year
1  1946
1  1947
1  1948
1  1949
1  1950
1  1951
2  1960
.  ....

关于如何做到这一点的任何建议都会很棒。感谢。

3 个答案:

答案 0 :(得分:2)

尝试“Hadley'verse”,即dplyrtidyr

library(dplyr)
library(tidyr)
testdat %>% 
  group_by(id) %>%
  expand(year=full_seq(c(startyear, endyear), 1))
# Source: local data frame [64 x 2]
# Groups: id [10]
# 
#       id  year
#    (int) (dbl)
# 1      1  1946
# 2      1  1947
# 3      1  1948
# 4      1  1949
# 5      1  1950
# 6      1  1951
# 7      1  1952
# 8      2  1960
# 9      2  1961
# 10     3  1965
# ..   ...   ...

答案 1 :(得分:1)

melt中的

reshape可以处理:

library(reshape)
melt(testdat, id.vars  = c("id"))

答案 2 :(得分:0)

您正在寻求从宽幅转换为长格式。

tidyr包中的gather函数可以执行此操作。

Cookbook for R中有一个全面的例子。