使用原始数据框中新列中的值重塑 R 数据框

Reshape R dataframe with values in new columns from the original dataframe

我有以下数据框“饮食”:

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 组织。其他列的每个 ID 都有唯一值,可以成为一行。像这样:

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

等等。如何获得正确的数据框形状?

您可以使用 {tidyr} 中更新的 pivot_wider()

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