Полагаю, вы новичок в R, поэтому я угадаю, что вы имеете в виду, и дам вам более правильную терминологию.Если я ошибаюсь, то, по крайней мере, это может помочь вам прояснить вопрос.
В R таблица - это особый случай матрицы, которая возникает в результате кросс-табуляции.Я думаю, что вы должны (или хотите) начать с data.frame
.data.frame
- это набор столбцов с потенциально разными типами, но одинаковой длины;в этом смысле оно «прямоугольное».Как правило, элементы в одинаковых позициях в столбцах (то есть в каждой строке) элемента data.frame
связаны друг с другом.Столбцы data.frame
имеют имена, как и строки.
long <- data.frame(year=c(2000,2000,2002,2002,2008,2008),
val=c(0.051568, 0.04805, 0.029792,
0.056141, 0.047285, 0.038989))
Что при печати выглядит как
> long
year val
1 2000 0.051568
2 2000 0.048050
3 2002 0.029792
4 2002 0.056141
5 2008 0.047285
6 2008 0.038989
Само по себе этого недостаточно, потому что для вашегожелаемый результат, вам нужно указать, какое значение, скажем, 2000 находится в первой строке, а какое во второй (и т. д., если их было больше).В вашем примере, это просто порядок, в котором они находятся.
long$targetrow = 1:2
, что делает long
теперь похожим на
> long
year val targetrow
1 2000 0.051568 1
2 2000 0.048050 2
3 2002 0.029792 1
4 2002 0.056141 2
5 2008 0.047285 1
6 2008 0.038989 2
Теперь вы можете использовать reshape
для него.
reshape(long, idvar="targetrow", timevar="year", direction="wide")
, что дает
> reshape(long, idvar="targetrow", timevar="year", direction="wide")
targetrow val.2000 val.2002 val.2008
1 1 0.051568 0.029792 0.047285
2 2 0.048050 0.056141 0.038989
Более сложные преобразования возможны при использовании пакета reshape2
, но это должно помочь вам начать.