字符向量被强制

时间:2019-02-11 05:48:41

标签: r string list vector

我正在执行此简单命令,该命令使用字符串“ A”,并使用空格将其拆分为单词。现在,将此单词向量传递给replace方法,在该方法中它将所有看起来像完整数字的内容替换为“ 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")

输出:

[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")

输出:

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

所需:

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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

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"

答案 1 :(得分:1)

您可以使用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"