Каково значение " \\." в тидыре :: раздельно? - PullRequest
0 голосов
/ 30 января 2020

какова цель "\." И почему она цитируется? это код:

library(tidyr)

iris.tidy <- iris %>%
  gather(key, Value, -Species) %>%
  separate(key, c("Part", "Measure"), "\\.")

для набора данных радужной оболочки

Ответы [ 2 ]

1 голос
/ 30 января 2020

Было бы легче понять, если вы запустите код шаг за шагом.

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.

1 голос
/ 30 января 2020

. говорит каждый символ (в регулярном выражении). Если вы на самом деле не хотите использовать его как "." (сам символ), вам нужно «экранировать» его с помощью \, который, однако, также является специальным символом в регулярных выражениях и, следовательно, также должен быть экранирован.

...