このようなヘッダーを持つテーブルがあります
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でこれを行う最良の方法は何ですか?
ベース 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