我试图找出如何将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
. ....
关于如何做到这一点的任何建议都会很棒。感谢。
答案 0 :(得分:2)
尝试“Hadley'verse”,即dplyr
和tidyr
:
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)