#r #dataframe #data-science #data-analysis #transpose
#r #dplyr
Вопрос:
У меня есть набор данных, примерно такой:
df_1 <- tribble(
~id, ~type, ~min_price, ~max_price,
"1", "X", 10, 40,
"1", "Y", 20, 50,
"2", "X", 18, 40,
"2", "Y", 34, 50,
"2", NA, 15, 70,
"3", "X", 40, 90,
"3", "Y", 23, 100,
)
Но теперь я хочу сгруппировать данные по «id», а затем переключить строки на столбцы. Я думаю, что это не что-то вроде транспонирования.
df_1 <- tribble(
~id, ~min_price_X, ~min_price_Y, ~min_price_NA, ~max_price_X, ~max_price_Y, ~max_price_NA,
"1", 10, 10, NA, 40, 50, NA,
"2", 18, 34, 15, 40, 50, 70,
"3", 40, 23, NA, 90, 100, NA,
)
Есть ли у вас какие-либо предложения по получению этих данных?
Ответ №1:
Мы можем использовать, pivot_wider
который может занимать несколько values
столбцов.
tidyr::pivot_wider(df_1, names_from = type, values_from = c(min_price, max_price))
# A tibble: 3 x 7
# id min_price_X min_price_Y min_price_NA max_price_X max_price_Y max_price_NA
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 10 20 NA 40 50 NA
#2 2 18 34 15 40 50 70
#3 3 40 23 NA 90 100 NA
Ответ №2:
Вы можете попробовать это:
library("reshape2")
dcast(melt(df_1, id.vars = c("id", "type")), id ~ variable type)
Результатом будет:
id min_price_X min_price_Y min_price_NA max_price_X max_price_Y max_price_NA
1 1 10 20 NA 40 50 NA
2 2 18 34 15 40 50 70
3 3 40 23 NA 90 100 NA