我有一个如下所示的数据框:
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)
)
我怎样才能实现这一目标?谢谢您的帮助!
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(.))
。