Я работаю с данными панели в python, и мне нужно распаковать свой фрейм данных для целей тестирования. В python все работает нормально, однако я пытаюсь сделать то же самое в R, и кажется, что функция распаковки работает по-другому. Представьте, что у меня есть следующий фрейм данных:
data = np.array([['Id','AsofMonth','x1','x2','y'],
['A',1, 5, 6,10],
['A',2, 5, 4,12],
['A',3,6, 5,13],
['B',1,2, 6,2],
['B',2,2, 2,3],
['B',3,4, 4,5]],
)
df = pd.DataFrame(data=data[1:,1:],
index=data[1:,0],
columns=data[0,1:])
Я использовал функцию unstack в python для распаковки моего фрейма данных:
df.sort_values(by='AsofMonth', inplace=True)
df1 = df.reset_index().set_index(['AsofMonth','index']).unstack(-1)
Я попытался использовать функцию unstack en reshape в R, но не получил того же ответа, что и в python:
df <- data.frame(c('A','B','A', 'B','A','B'),
c(1,1,2,2,3,3),
c(5,2,5,2,6,4),
c(6,4,5,6,2,4),
c(10,2,12,3,13,5))
colnames(df) <- c('LoanID','AsofMonth','x1','x2','y')
df <- unstack(df)
Что я могу сделать, чтобы получить такие же результаты?
@bcarlsen - спасибо за объяснение, и я определенно присмотрюсь к классу tbl_df. Я хочу разложить данные, чтобы включить разделение временных рядов. Временной ряд cv предполагает, что фрейм данных индексируется по времени. После разделения я могу снова сложить данные для целей прогнозирования.
Это даст более близкий результат:
#Code
new <- reshape(df,timevar = 'LoanID',idvar = 'AsofMonth',direction = 'wide')
Выход:
AsofMonth x1.A x2.A y.A x1.B x2.B y.B
1 1 5 6 10 2 4 2
3 2 5 5 12 2 6 3
5 3 6 2 13 4 4 5
Спасибо, что поделился. Действительно, это даст аналогичные результаты. Могу ли я использовать ту же функцию, чтобы сложить его обратно?
Спасибо, что поделился. Действительно, это даст аналогичные результаты. Могу ли я использовать ту же функцию, чтобы сложить его обратно?
@Mike Да, просто используйте direction=long
, это сработает.
Использование pivot_wider
library(dplyr)
library(tidyr)
df %>%
pivot_wider(names_from = LoanID, values_from = c(x1, x2, y))
-выход
# A tibble: 3 x 7
# AsofMonth x1_A x1_B x2_A x2_B y_A y_B
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 5 2 6 4 10 2
#2 2 5 2 5 6 12 3
#3 3 6 4 2 4 13 5
Структура
data.frame
R не поддерживает MultiIndex для столбцов (или любую иерархическую индексацию). Учитывая это ограничение, каков вариант использования для преобразования ваших данных в эту форму? Классtbl_df
изtibble
/dplyr
поддерживает использование столбцов аналогично иерархическим индексам строк с его системой группировки, но для иерархических индексов столбцов нет эквивалента. Вам нужно будет определить свою собственную структуру данных, чтобы сохранить отдельные иерархические индексы.