Было бы легче понять, если вы запустите код шаг за шагом.
gather
выводит данные в длинном формате со столбцом key
с именами столбцов и столбцом value
со значениями этих столбцов
library(tidyr)
iris %>% gather(key, Value, -Species) %>% head
# Species key Value
#1 setosa Sepal.Length 5.1
#2 setosa Sepal.Length 4.9
#3 setosa Sepal.Length 4.7
#4 setosa Sepal.Length 4.6
#5 setosa Sepal.Length 5.0
#6 setosa Sepal.Length 5.4
Затем мы используем separate
для деления key
столбец в двух столбцах на основе "."
в их тексте.
iris %>%
gather(key, Value, -Species) %>%
separate(key, c("Part", "Measure"), "\\.") %>% head
# Species Part Measure Value
#1 setosa Sepal Length 5.1
#2 setosa Sepal Length 4.9
#3 setosa Sepal Length 4.7
#4 setosa Sepal Length 4.6
#5 setosa Sepal Length 5.0
#6 setosa Sepal Length 5.4
Поскольку аргумент sep
в separate
принимает регулярное выражение, а .
имеет специальное значение в регулярном выражении, если мы мы хотим указать фактический .
, нам нужно его избежать, поэтому мы используем "\\."
. Также обратите внимание, что gather
был заменен на pivot_longer
в более новой версии tidyr
.