在数据框中转置 n 行,在 R 中有许多列

transpose n rows in dataframe with many columns in R

我有一个包含 6 个变量和 973 个观测值的数据框。第五列有四个唯一字符条目,最后一列有相应的数值。以下是数据示例:

year    month    gear    area    code    value
2018    1        YH      678      GEF     0.8
2018    1        YH      678      KID     1.7
2018    2        YH      678      KID     1.2
2017    3        JK      678      LKA     1.4
2017    3        JK      678      DJN     0.9
2017    3        JK      679      DJN     0.5
2018    7        JK      689      GEF     0.3

我想把第五列的代码做成headers列,每一行都有对应的值,重新排列如下:

year    month    gear    area    GEF    KID    LKA    DJN
2018    1        YH      678     0.8    1.7
2018    2        YH      678            1.2
2017    3        JK      678                   1.4    0.9
2017    3        JK      679                          0.5
2018    7        JK      680     0.3 

我一直没能找到一种方法来执行此操作,请保留前四列的格式。

df <- read.table(text = "
year    month    gear    area    code    value
2018    1        YH      678      GEF     0.8
2018    1        YH      678      KID     1.7
2018    2        YH      678      KID     1.2
2017    3        JK      678      LKA     1.4
2017    3        JK      678      DJN     0.9
2017    3        JK      679      DJN     0.5
2018    7        JK      689      GEF     0.3", header = T)

reshape(df, v.names = "value", timevar = "code", direction = "wide", idvar = c("year", "month", "gear", "area"))

  year month gear area value.GEF value.KID value.LKA value.DJN
1 2018     1   YH  678       0.8       1.7        NA        NA
3 2018     2   YH  678        NA       1.2        NA        NA
4 2017     3   JK  678        NA        NA       1.4       0.9
6 2017     3   JK  679        NA        NA        NA       0.5
7 2018     7   JK  689       0.3        NA        NA        NA

您需要从 "long" 到 "wide" 格式:

library(tidyverse)    
df_wide <- spread(df, code, value)