Измените форму кадра данных R со значениями в новых столбцах из исходного кадра данных

#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. Рад, что это заставило тебя двигаться дальше. Всего наилучшего, Наттис.