将数据框设为宽格式并对多个变量进行分组

问题描述 投票:0回答:1

我有一个如下所示的数据框:

example <- data.frame(
  PID = c(11191, 11192, 21191, 21193),
  NS = c(1,5,9,13),
  NR = c(2,6,10,14), 
  SE = c(3,7,11,15), 
  GR = c(4,8,12,16)
)

我想将数据帧设为宽格式,以便

PID
的最后一位数字是分组变量。这是所需的解决方案:

example_solution <- data.frame(
  target = c(1119, 2119),
  NS_1 = c(1,9),
  NR_1 = c(2,10),
  SE_1 = c(3, 11),
  GR_1 = c(4,12),
  NS_2 = c(5,NA),
  NR_2 = c(6, NA),
  SE_2 = c(7, NA),
  GR_2 = c(8, NA),
  NS_3 = c(NA,13),
  NR_3 = c(NA, 14),
  SE_3 = c(NA, 15),
  GR_3 = c(NA, 16)
)

我怎样才能实现这一目标?谢谢您的帮助!

r dplyr
1个回答
0
投票
library(dplyr)
library(tidyr)
example %>%
  mutate(one = PID %% 10, PID = PID %/% 10) %>%
  pivot_wider(id_cols = PID, names_from = one,
              values_from = -c(PID, one), names_sep = "_")
# # A tibble: 2 × 13
#     PID  NS_1  NS_2  NS_3  NR_1  NR_2  NR_3  SE_1  SE_2  SE_3  GR_1  GR_2  GR_3
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  1119     1     5    NA     2     6    NA     3     7    NA     4     8    NA
# 2  2119     9    NA    13    10    NA    14    11    NA    15    12    NA    16

您可以使用 dplyr 中的内容更改列顺序:在 R 中按字母顺序排列列,也许是

%>% select(PID, sort(names(.))

© www.soinside.com 2019 - 2024. All rights reserved.