Символьный вектор принуждается - PullRequest
0 голосов
/ 11 февраля 2019

Я делаю эту простую команду, где она берет строку «A» и разбивает ее на слова, используя пробел.Теперь передайте этот вектор слов методу замены, где он заменяет все, что выглядит как полное число, на «P12».Но вывод становится беспорядочным из-за выполнения последней операции

 A <- list(c("a12, 34, 35, 46"),c("ab14, 44, 55, 66"))
    B <- stringr::str_split(A, "[[:space:]]") %>% str_replace(pattern = "^[:digit:]{1,}[,]{1}$", replacement = "p12")

output:

[1] "c(\"a12,\", \"34,\", \"35,\", \"46\")"

Обновлено : требуемый вывод должен содержать два символьных вектора, хранящихся в спискес именем B:

[1] list(c("a12", "34", "35", "46"), c("ab14", "44", "55", "66"))

Эта часть является ответом.Спасибо! Также, пожалуйста, помогите с регулярным выражением.Когда я использую команду ниже, 46 не заменяется.Как я должен убедиться, что 1) текст является полным числом, за которым следует запятая, или запятая не заменяется на "p12"

str_replace(c("a12,", "34,", "35,", "46"), pattern = "^[:digit:]{1,}[,]{1}$", replacement = "p12")

output:

"a12," "p12"  "p12"  "46"

требуемый:

"a12," "p12"  "p12"  "p12"

Буду признателен за любую помощь

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете использовать lapply для замены каждого элемента списка.Ваш вопрос немного неясен (и постоянно меняется), поэтому я не уверен, хотите ли вы запятые в выводе или нет.

Для решения с запятыми мы можем использовать:

str_split(A, "[[:space:]]") %>% 
  lapply(function(x) gsub("\\b\\d+\\b", "p12", x))
# [[1]]
# [1] "a12," "p12," "p12," "p12" 
# 
# [[2]]
# [1] "ab14," "p12,"  "p12,"  "p12"  

Без запятых:

str_split(A, boundary('word')) %>% 
  lapply(function(x) gsub("\\b\\d+\\b", "p12", x))
# [[1]]
# [1] "a12" "p12" "p12" "p12"
# 
# [[2]]
# [1] "ab14" "p12"  "p12"  "p12"
0 голосов
/ 11 февраля 2019

str_split возвращает список векторов символов.Вы просто хотите unlist().Это не интуитивно понятно, но позволяет обрабатывать ввод символов вектора (по одному списку для каждого элемента).

Что касается регулярного выражения, в конечном числе нет запятой.Попробуйте разрешить совпадение с 0 или 1 запятыми:

library(dplyr)
library(stringr)
A <- "a12, 34, 35, 46"
str_split(A, "[[:space:]]") %>% 
  unlist() %>% 
  str_replace(pattern = "^[:digit:]{1,}[,]{0,1}$", replacement = "p12")

Вывод:

#[1] "a12," "p12"  "p12"  "p12"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...