标签: stringr

str_replace"NA"出现意外行为

我正在尝试将字符串转换为数字,并遇到了一些意外的行为str_replace.这是一个最小的工作示例:

library(stringr)
x <- c("0", "NULL", "0")

# This works, i.e. 0 NA 0
as.numeric(str_replace(x, "NULL", ""))

# This doesn't, i.e. NA NA NA
as.numeric(str_replace(x, "NULL", NA))
Run Code Online (Sandbox Code Playgroud)

在我看来,第二个例子应该工作,因为它应该只替换向量中的第二个条目NA(它是字符向量中的有效值).但事实并非如此:内部str_replace将所有三个条目转换为NA.

这里发生了什么?我查看了文档str_replace,stri_replace_all但没有看到明显的解释.

编辑:为了澄清,这是stringr_1.0.0stringi_1.0-1R上3.1.3,Windows 7操作系统.

r stringr stringi

9
推荐指数
2
解决办法
1371
查看次数

R从str_split获取最后一个元素

我有一个R字符串列表,我想得到每个字符串的最后一个元素

require(stringr)

string_thing <- "I_AM_STRING"
Split <- str_split(string_thing, "_")
Split[[1]][length(Split[[1]])]
Run Code Online (Sandbox Code Playgroud)

但我怎么能用字符串列表呢?

require(stringr)

string_thing <- c("I_AM_STRING", "I_AM_ALSO_STRING_THING")
Split <- str_split(string_thing, "_")

#desired result
answer <- c("STRING", "THING")
Run Code Online (Sandbox Code Playgroud)

谢谢

regex r stringr

9
推荐指数
2
解决办法
7585
查看次数

没有循环的Dataframe中的子字符串,填充和粘贴列

我有这个数据框,它看起来像这样:

在此输入图像描述

我需要从列中的第一个字符开始,将整个值放入a中,然后在末尾放置一个计数器,在a列中重复递增.此计数器必须始终为三.最终结果如下:

在此输入图像描述

所以没有什么戏剧性的,我能用以下代码做这件事(准备给人留下深刻的印象):

library(stringr) 
tk <- ""
for (i in 1:nrow(df)){
  if (tk == df$an[i]){
    counter <- counter + 1
  } else {
    tk <- df$an[i]
    counter <- 1
  }
  df$ap[i] <- counter
}

df$ap <- paste0(substr(df$at, 1, 1), df$an, str_pad(df$ap, 3, pad="0"))
Run Code Online (Sandbox Code Playgroud)

我对这次灾难不满意.它似乎不是很"R",我非常希望永远不要让它看到光明的一天.我怎样才能让这更"R"?

我很欣赏这个建议.

string r dataframe stringr

9
推荐指数
3
解决办法
292
查看次数

正则表达式删除 R 中的前导零,除非最后一个(或唯一的)字符为零

gsub("(?<![0-9])0+", "", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5"  "AB" ""   ""
gsub("(^|[^0-9])0+", "\\1", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5"  "AB" ""   ""
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式来自这个 SO 线程,解释了如何从 R 中的字符串中删除所有前导零。作为这个正则表达式的结果,“000”和“0”都被转换为“”。相反,我想从字符串中删除所有前导零,除了最后一个字符恰好为零或唯一字符为零的情况。

"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0"   would become "0"
Run Code Online (Sandbox Code Playgroud)

另一个 SO 线程解释了如何做我想做的事,但我认为我的语法不太正确,在 R 中应用解决方案。而且我真的不明白下面第一个和第二个解决方案之间的区别(如果它们确实有效)。

gsub("s/^0*(\d+)$/$1/;", "", c("005", "0AB", "000", "0"), perl = TRUE)  # 1st solution
# Error: '\d' is an unrecognized escape …
Run Code Online (Sandbox Code Playgroud)

regex string r gsub stringr

9
推荐指数
1
解决办法
876
查看次数

dplyr 过滤条件以区分 unicode 符号及其 unicode 表示

我正在尝试根据它是否为表单来过滤符号列 \uxxxx

这在视觉上很容易,也就是说,有些看起来像$, ¢, £,而另一些看起来像\u058f, \u060b, \u07fe

但我似乎无法弄清楚使用stringi/dplyr

library(dplyr)
library(stringi)

df <- structure(list(Character = c("\\u0024", "\\u00A2", "\\u00A3", 
                             "\\u00A4", "\\u00A5", "\\u058F", "\\u060B", "\\u07FE", "\\u07FF", 
                             "\\u09F2", "\\u09F3", "\\u09FB", "\\u0AF1", "\\u0BF9", "\\u0E3F", 
                             "\\u17DB", "\\u20A0", "\\u20A1", "\\u20A2", "\\u20A3"), 
                     Symbol = c("$", "¢", "£", "¤", "¥", "\u058f", "\u060b", "\u07fe", "\u07ff", 
                                "?", "?", "\u09fb", "\u0af1", "\u0bf9", "?", "?", "?", 
                                "?", "?", "?")), row.names = c(NA, 20L), class = "data.frame")

   Character Symbol
1    \\u0024      $
2 …
Run Code Online (Sandbox Code Playgroud)

r stringr dplyr stringi

9
推荐指数
1
解决办法
371
查看次数

解析html包含&nbsp; (不间断的空间)

我正在rvest用来解析一个网站.我正在用这些小小的不间断空间撞墙.如何删除&nbsp;解析后的html文档中元素创建的空格?

library("rvest")
library("stringr")  

minimal <- html("<!doctype html><title>blah</title> <p>&nbsp;foo")

bodytext <- minimal %>%
  html_node("body") %>% 
  html_text
Run Code Online (Sandbox Code Playgroud)

现在我已经提取了正文:

bodytext
[1] " foo"
Run Code Online (Sandbox Code Playgroud)

但是,我无法删除那个讨厌的空白!

str_trim(bodytext)

gsub(pattern = " ", "", bodytext)
Run Code Online (Sandbox Code Playgroud)

r stringr

8
推荐指数
3
解决办法
3810
查看次数

stringr等同于grep

是否存在与基本R 函数等效的字符串grep

我想要匹配的字符串的索引.例:

grep("F|Y", LETTERS)
[1]  6 25
Run Code Online (Sandbox Code Playgroud)

使用stringr我的解决方法将使用which如下:

which(str_detect(LETTERS, "F|Y"))
[1]  6 25
Run Code Online (Sandbox Code Playgroud)

r stringr

8
推荐指数
1
解决办法
2033
查看次数

str_replace_all 不在管道中工作

这是我的代码:

df <- df %>%
  filter(conditions x, y, and z) %>%
  str_replace_all(string, pattern, replacement)
Run Code Online (Sandbox Code Playgroud)

这样做时,我收到错误:

Error in str_replace_all(., string, pattern, replacement) :
  unused argument("")
Run Code Online (Sandbox Code Playgroud)

我知道代码在复制方面一点用处都没有,正如我之前所说,我不能共享数据,但假设输入是正确的(我已经通过改变变量来让它工作)。替换是一个空字符串,但据我所知,这应该无关紧要。

我只是好奇为什么 str_replace_all 在管道中不起作用,有人有任何见解吗?

pipeline r stringr dplyr

8
推荐指数
1
解决办法
9444
查看次数

除以# 开头的单词外,用于删除数字的正则表达式

我有一些可以包含字母、数字和“#”符号的字符串。

我想删除除以“#”开头的单词以外的数字

下面是一个例子:

"table9 dolv5e #10n #dec10 #nov8e 23 hello"
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

"table dolve #10n #dec10 #nov8e  hello"
Run Code Online (Sandbox Code Playgroud)

如何使用 regex、stringr 或 gsub 执行此操作?

regex r gsub stringr

8
推荐指数
2
解决办法
331
查看次数

从字符串中选择每第 n 个字符

我有一串带有随机空格和一些句点的随机字母。我想从中取出每第 n 个值(例如每 10 个)。我的想法是,如果我可以转置它,那么我可以使用行号来选择每个第 n 个值。任何帮助表示赞赏!

string <- "hutmnycdsldzlkt.ytairuaypk  dq.gubgp hyfjuwvpcdmvqxfcuhapnx"
Run Code Online (Sandbox Code Playgroud)

regex string substring r stringr

8
推荐指数
3
解决办法
348
查看次数

标签 统计

r ×10

stringr ×10

regex ×4

string ×3

dplyr ×2

gsub ×2

stringi ×2

dataframe ×1

pipeline ×1

substring ×1