Неожиданный результат, а не замена, в R вне функции gsub

В результате определенной операции у меня есть следующий фрейм данных с 729 наблюдениями.

> head(con)
              Connections
1  r_con[C3-C3,Intercept]
2  r_con[C3-C4,Intercept]
3 r_con[C3-CP1,Intercept]
4 r_con[C3-CP2,Intercept]
5 r_con[C3-CP5,Intercept]
6 r_con[C3-CP6,Intercept]

Как видно, шаблон, который нужно удалить, — это все, кроме информации о паре электродов, например, в первом наблюдении это будет C3-C3. Теперь это мой взгляд на проблему, и я ожидаю, что фрейм данных будет удален со всем. Если я не ошибаюсь (что, вероятно, так), синтаксис регулярных выражений в порядке, и, насколько я понимаю, я считаю, что fixed=TRUE также необходим. Однако я не понимаю вывод R. Когда я ожидаю, что шаблон ничего не изменит "", он возвращает этот вывод, который для меня не имеет смысла.

> gsub("r_con\\[\\,Intercept\\]\\","",con,fixed=TRUE)

[1] "3:731"

Я считаю, что это, вероятно, будет глупый вопрос для опытного программиста, которым я далеко не являюсь, и любое понимание будет высоко оценено.

[ОБНОВЛЕНИЕ С РЕШЕНИЕМ]

Благодаря Тиму и Бену я понял, что использовал неправильный синтаксис регулярных выражений и неправильный источник, это дошло до меня:

con2 <- sub("^r_con\\[([^,]+),Intercept\\]", "\\1", con$Connections)

Можете ли вы опубликовать вывод class(con$Connections[1])?

Ben 13.12.2020 12:35

Конечно! Это [1] "factor".

Unai Vicente 13.12.2020 12:36

Я обновил пост, потому что я использовал gsub и неохотно набрал sub, если это важно. Хотя пробовал с обоими.

Unai Vicente 13.12.2020 12:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, ваша проблема в том, что вы получаете доступ к «con» в своем вызове sub. Кроме того, как указал пользователь выше меня, вы, вероятно, не хотите использовать sub.

Я предполагаю, что ваши данные непротиворечивы, то есть строки в con$Connections следуют более или менее одному и тому же шаблону. Затем это работает:

Я установил этот пример:

con <- data.frame(Connections = c("r_con[C3-C3,Intercept]", "r_con[C3-CP1,Intercept]"))
library(stringr)
f <- function(x){
  part <- str_split(x, ",")[[1]][1]
  str_sub(part, 7, -1)
}

f(con$Connections[1])
sapply(con$Connections, f)

Вот что я получаю: > con2 <- sub("r_con\\[\\,Intercept\\]\\","",con$Connections,fixed=TRU‌​E)> head(con2) [1] "r_con[C3-C3,Intercept]" "r_con[C3-C4,Intercept]" "r_con[C3-CP1,Intercept]" "r_con[C3-CP2,Intercept]" [5] "r_con[C3-CP5,Intercept]" "r_con[C3-CP6,Intercept]" так что в основном ничего не изменилось.

Unai Vicente 13.12.2020 12:44

попробуйте новый подход, я только что внес изменения

Ben 13.12.2020 12:47

Я взял ваш con$Connection и синтаксис от @Tim, и теперь он работает нормально. Я обновлю сообщение с решением, если кто-то найдет его полезным. Большое спасибо!!

Unai Vicente 13.12.2020 12:50
Ответ принят как подходящий

Функция sub так не работает. Одним из жизнеспособных подходов было бы захватить необходимое количество, а затем использовать эту группу захвата в качестве замены:

x <- "r_con[C3-C3,Intercept]"
term <- sub("^r_con\\[([^,]+),Intercept\\]", "\\1", x)
term

[1] "C3-C3"   

Извините, Тим, я не уверен, что понимаю, значит, я не могу изменить все вхождения сразу?

Unai Vicente 13.12.2020 12:46

Однако после использования синтаксиса вашего регулярного выражения в моем примере, похоже, я ошибся. Теперь он работает нормально. Большое спасибо!!

Unai Vicente 13.12.2020 12:48

@UnaiVicente Используйте следующее, чтобы изменить весь столбец: con$Connections <- sub("^r_con\\[([^,]+),Intercept\\]", "\\1", con$Connections)

Tim Biegeleisen 13.12.2020 13:19

Другие вопросы по теме