В результате определенной операции у меня есть следующий фрейм данных с 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)
Конечно! Это [1] "factor"
.
Я обновил пост, потому что я использовал gsub
и неохотно набрал sub
, если это важно. Хотя пробовал с обоими.
Я думаю, ваша проблема в том, что вы получаете доступ к «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=TRUE)
> 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]"
так что в основном ничего не изменилось.
попробуйте новый подход, я только что внес изменения
Я взял ваш con$Connection и синтаксис от @Tim, и теперь он работает нормально. Я обновлю сообщение с решением, если кто-то найдет его полезным. Большое спасибо!!
Функция sub
так не работает. Одним из жизнеспособных подходов было бы захватить необходимое количество, а затем использовать эту группу захвата в качестве замены:
x <- "r_con[C3-C3,Intercept]"
term <- sub("^r_con\\[([^,]+),Intercept\\]", "\\1", x)
term
[1] "C3-C3"
Извините, Тим, я не уверен, что понимаю, значит, я не могу изменить все вхождения сразу?
Однако после использования синтаксиса вашего регулярного выражения в моем примере, похоже, я ошибся. Теперь он работает нормально. Большое спасибо!!
@UnaiVicente Используйте следующее, чтобы изменить весь столбец: con$Connections <- sub("^r_con\\[([^,]+),Intercept\\]", "\\1", con$Connections)
Можете ли вы опубликовать вывод
class(con$Connections[1])
?