1

我有一个看起来像这样的数据框,有两个关键列,然后是三种不同类型的事物的计数。

  Year Month Urban Suburban Rural
1    1     1    11       12    13
2    1     2    21       22    23

我想扩展每一行,以便它列出类型作为一个因素,然后是该类型中的数字,所以是这样的:

  Year Month     Type Number
1    1     1    Urban     11
2    1     1 Suburban     12
3    1     1    Rural     13
4    1     2    Urban     21
5    1     2 Suburban     22
6    1     2    Rural     23

有没有无痛的功能?

4

2 回答 2

2

这正是reshapereshape2包的设计目的:

require(reshape2)
x <- read.table(text = "Year Month Urban Suburban Rural
1    1     1    11       12    13
2    1     2    21       22    23")

#Specify the variables that are your ID variables. The others will form your "long" data
x.m <- melt(x, id.vars = c("Year", "Month"))
#-----  
Year Month variable value
1    1     1    Urban    11
2    1     2    Urban    21
3    1     1 Suburban    12
...

统计软件杂志上有一篇论文,这是一个很好的起点。

于 2012-05-24T19:01:52.137 回答
2
dat <- read.table(text=" Year Month Urban Suburban Rural
 1    1     1    11       12    13
 2    1     2    21       22    23
 ", header=TRUE)

reshape(dat, direction="long", idvar=1:2, varying=names(dat)[3:5], times=names(dat)[3:5], v.names="Number", timevar="Type")
             Year Month     Type Number
1.1.Urban       1     1    Urban     11
1.2.Urban       1     2    Urban     21
1.1.Suburban    1     1 Suburban     12
1.2.Suburban    1     2 Suburban     22
1.1.Rural       1     1    Rural     13
1.2.Rural       1     2    Rural     23

(请注意,该reshape功能在标准包中,而不是在 reshape 或 resshape2 包中。)

于 2012-05-24T19:02:03.007 回答