我正在尝试将字符串转换为数字,并遇到了一些意外的行为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.0
和stringi_1.0-1
R上3.1.3,Windows 7操作系统.
我有一个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)
谢谢
我有这个数据框,它看起来像这样:
我需要从列中的第一个字符开始,将整个值放入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"?
我很欣赏这个建议.
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) 我正在尝试根据它是否为表单来过滤符号列 \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) 我正在rvest
用来解析一个网站.我正在用这些小小的不间断空间撞墙.如何删除
解析后的html文档中元素创建的空格?
library("rvest")
library("stringr")
minimal <- html("<!doctype html><title>blah</title> <p> 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 函数等效的字符串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) 这是我的代码:
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 在管道中不起作用,有人有任何见解吗?
我有一些可以包含字母、数字和“#”符号的字符串。
我想删除除以“#”开头的单词以外的数字
下面是一个例子:
"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 执行此操作?
我有一串带有随机空格和一些句点的随机字母。我想从中取出每第 n 个值(例如每 10 个)。我的想法是,如果我可以转置它,那么我可以使用行号来选择每个第 n 个值。任何帮助表示赞赏!
string <- "hutmnycdsldzlkt.ytairuaypk dq.gubgp hyfjuwvpcdmvqxfcuhapnx"
Run Code Online (Sandbox Code Playgroud)