我认为你不想使用
extract
. 我想
separate
和
spread
library(tidyverse)
df_long <- df_wide %>%
gather(key=Category, value=Measurement, Cat1:Cat3_err, factor_key = TRUE) %>%
separate(Category, into = c("Category", "Type")) %>%
mutate(Type = ifelse(is.na(Type), "Measurement", "Error")) %>%
spread(Type, Measurement) %>%
select(Reading, Category, Measurement, Error, Sample)
df_long
Reading Category Measurement Error Sample
1 1 Cat1 0.8453114 0.074961215 X14
2 1 Cat2 4.5962112 0.059012908 X14
3 1 Cat3 5.4100838 0.076049726 X14
4 2 Cat1 4.5956145 0.016215603 X23
5 2 Cat2 1.7768868 0.040258838 X23
6 2 Cat3 1.9597101 0.027356213 X23
7 3 Cat1 1.6204584 0.057760820 X11
8 3 Cat2 4.9478913 0.054855327 X11
9 3 Cat3 2.9670444 0.004276482 X11
10 4 Cat1 0.1831593 0.038415489 X10
11 4 Cat2 2.5716471 0.024932980 X10
12 4 Cat3 8.5517659 0.015378512 X10