0

我有一个这样的表头

Id x.1960 x.1970 x.1980 x.1990 x.2000 y.1960 y.1970 y.1980 y.1990 y.2000

我想将此表旋转为

Id time x y

在 Excel 或 R 中执行此操作的最佳方法是什么?

4

1 回答 1

4

像这样使用 base R 的东西reshape

先获取一些数据

test <- read.table(text="Id x.1960 x.1970 x.1980 x.1990 x.2000 y.1960 y.1970 y.1980 y.1990 y.2000
a 1 2 3 4 5 6 7 8 9 10
b 10 20 30 40 50 60 70 80 90 100",header=TRUE)

然后重塑:

reshape(
  test,
  idvar="Id",
  varying=list(2:6,7:11),
  direction="long",
  v.names=c("x","y"),
  times=seq(1960,2000,10)
)

或者让我们reshape根据.分隔符自动猜测名称:

reshape(
  test,
  idvar="Id",
  varying=-1,
  direction="long",
  sep="."
)

导致:

       Id time  x   y
a.1960  a 1960  1   6
b.1960  b 1960 10  60
a.1970  a 1970  2   7
b.1970  b 1970 20  70
a.1980  a 1980  3   8
b.1980  b 1980 30  80
a.1990  a 1990  4   9
b.1990  b 1990 40  90
a.2000  a 2000  5  10
b.2000  b 2000 50 100
于 2013-04-09T03:13:42.127 回答