#r #dataframe #reshape
Вопрос:
У меня есть следующий фрейм данных «Диета»:
ID Food.group grams day weight
A 12 200 1 60
A 13 300 1 60
A 14 100 1 60
A 15 50 1 60
A 16 200 1 60
A 17 250 1 60
B 13 300 2 73
B 14 140 2 73
B 15 345 2 73
B 17 350 2 73
C 12 120 6 66
C 13 100 6 66
C 16 200 6 66
Мне нужно создать новый фрейм данных с каждой группой продуктов питания в виде нового столбца и значениями в граммах в качестве их значений, все они организованы по идентификатору. Остальные столбцы имеют уникальные значения для каждого идентификатора и могут стать одной строкой. Что-то вроде этого:
ID 12 13 14 15 16 17 day weight
A 200 300 100 50 200 250 1 60
B N/A 300 140 345 N/A 350 2 73
C 120 100 N/A N/A 200 N/A 6 66
Я пробовал использовать Diet2 <- reshape(Diet, idvar="ID", timevar="Food.group", direction="wide")
Но я понимаю это:
ID 12.grams 12.day 12.weight 13.grams 13.day 13.weight
A 200 1 60 300 1 60
B N/A N/A N/A 300 2 73
C 120 6 66 100 6 66
и так далее. Как я могу получить правильную форму фрейма данных?
Ответ №1:
Вы можете использовать более свежие pivot_wider()
из {tidyr}
.
library(dplyr)
library(tidyr)
diet %>%
pivot_wider(id_cols = c("ID","day","weight")
, names_from = "Food.group"
, values_from = "grams")
Это даст вам:
# A tibble: 3 x 9
ID day weight `12` `13` `14` `15` `16` `17`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 1 60 200 300 100 50 200 250
2 B 2 73 NA 300 140 345 NA 350
3 C 6 66 120 100 NA NA 200 NA
Комментарии:
1. Рад, что это заставило тебя двигаться дальше. Всего наилучшего, Наттис.