在excel或R中从列到行的数据透视表

时间:2013-04-09 02:47:21

标签: r excel pivot reshape

我有一个像这样的标题的表

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中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

使用基础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