Я предполагаю, что вы новичок в R, так что я собираюсь предположить, что вы имеете в виду и дать вам еще немного правильная терминология. Если я ошибаюсь, то, по крайней мере, это может помочь вам прояснить вопрос.
В R таблица представляет собой частный случай матрицы, которая возникает из перекрестной табуляции. Я думаю, что вы (или хотите) начать с data.frame
. A 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
пакет, но это должно вам начать работу.