могут ли gsub и%>% работать вместе - PullRequest
0 голосов
/ 03 мая 2018

интересно, можем ли мы использовать pipe, чтобы получить gsub вместе? кажется не могу

t <- c("(66.8309216,20.3991966)","(65.3337311,16.5161694)","(63.4276473,17.7292444)","(63.1711922,14.9591800)",
"(61.3011993,16.1534214)","(61.0917012,14.6663653)")
t%>%gsub('\\(','',t) %>%gsub('\\)','',t)

, кажется, не работает. Также, если есть df и есть столбец с именем t, те же данные внутри

df$t%>%gsub('\\(','',df$t) %>%gsub('\\)','',df$t)

все еще не работает. Кто-нибудь дает предложение?

Это работает

t<-gsub('\\(','',t)
t<-gsub('\\)','',t)

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Мы можем поместить квадратные скобки в квадратные скобки gsub, чтобы удалить оба

gsub("[()]", "", t)
#[1] "66.8309216,20.3991966" "65.3337311,16.5161694" "63.4276473,17.7292444"
#[4] "63.1711922,14.9591800" "61.3011993,16.1534214" "61.0917012,14.6663653"

Если квадратные скобки являются начальным и конечным символами, то также можно использовать метод substr

substr(t, 2, nchar(t)-1)
0 голосов
/ 03 мая 2018

Это будет работать при добавлении {}, также для вызова канала второй gsub следует использовать . вместо t

t %>%{gsub('\\(','',t)} %>%{gsub('\\)','',.)}
[1] "66.8309216,20.3991966" "65.3337311,16.5161694" "63.4276473,17.7292444" "63.1711922,14.9591800" "61.3011993,16.1534214" "61.0917012,14.6663653"
0 голосов
/ 03 мая 2018

Или вы можете заменить оба выражения за один раз:

gsub("(\\(|\\))", "", t);
#[1] "66.8309216,20.3991966" "65.3337311,16.5161694" "63.4276473,17.7292444"
#[4] "63.1711922,14.9591800" "61.3011993,16.1534214" "61.0917012,14.6663653"

Объяснение: Шаблоны регулярных выражений вида (a|b) соответствуют a или b.


Предполагая, что вы хотите извлечь записи на следующем шаге, вы можете использовать read.csv для автоматического заполнения data.frame записями из t:

read.csv(text = gsub("(\\(|\\))", "", t), header = F);
#        V1       V2
#1 66.83092 20.39920
#2 65.33373 16.51617
#3 63.42765 17.72924
#4 63.17119 14.95918
#5 61.30120 16.15342
#6 61.09170 14.66637
...