标签: stringr

R 从数据框中的列中提取前两个字符

我有一个包含多个的数据集,我想characters从该sr列中提取前两个。最后,这些字符将存储在一个新列中。

基本上,我想要一个新列permit_type,其中包含srieAPSP的前两个字符值MP

我怎样才能做到这一点?

样本数据

structure(list(date_received = c("11/30/2021  ", "11/30/2021  ", 
"11/30/2021  ", "11/30/2021  ", "11/30/2021  ", "11/17/2021  ", 
"12/3/2021  ", "12/3/2021  ", "12/13/2021  "), date_approved = c("11/30/2021", 
"11/30/2021", "11/30/2021", "11/30/2021", "11/30/2021", "11/17/2021", 
"12/3/2021", "12/3/2021", "12/3/2021"), sr = c("AP-21-080", "SP-21-081", 
"AP-21-082", "SP-21-083", "MP-21-084", "AP-21-085", "AP-21-086", 
"MP-21-087", "SP-21-088"), permit = c("AP1766856 Classroom C", 
"AP1766858 Classroom A", "AP1766862 Landscape Area", "AP1766864 Classroom B", 
"AO1766867", "06-SE-2420566", "06-E-2425187", "", "06-SM-2424110"
)), …
Run Code Online (Sandbox Code Playgroud)

r stringr

4
推荐指数
1
解决办法
6387
查看次数

从新列中的多列中提取字符串

我想在不同的列中找到一个单词并在新的列中对其进行变异。

“数据”是一个例子,“目标”是我想要的。我尝试了很多,但没有得到工作。

 library(dplyr)
 library(stringr)

 data <- tibble(
    component1 = c(NA, NA, "Word", NA, NA, "Word"),
    component2 = c(NA, "Word", "different_word", NA, NA, "not_this")
    )

 goal <- tibble(
    component1 = c(NA, NA, "Word", NA, NA, "Word"),
    component2 = c(NA, "Word", "different_word", NA, NA, "not_this"),
    component = c(NA, "Word", "Word", NA, NA, "Word")
    )


not_working <- data %>%
     mutate(component = across(starts_with("component"), ~ str_extract(.x, "Word")))
Run Code Online (Sandbox Code Playgroud)

r stringr dplyr

4
推荐指数
1
解决办法
376
查看次数

分割字符串并保留分隔符

假设我有一个字符串:

StringA/StringB/StringC
Run Code Online (Sandbox Code Playgroud)

有什么方法可以按/符号拆分该字符串,但将其保留在返回值中:

StringA
/StringB
/StringC
Run Code Online (Sandbox Code Playgroud)

string r strsplit stringr

4
推荐指数
1
解决办法
399
查看次数

如何过滤字符串变量以查找以字母开头的值

我有一个混乱的字符变量,例如:

df<-c("_oun_", "0000ff", "03815", "?3jhdb", "test", "1,000", "1.000")
Run Code Online (Sandbox Code Playgroud)

我想过滤掉所有不是单词的值。我认为首先要过滤掉所有不以字符开头的值。

我怎样才能做到这一点tidyverse?对于上面提到的示例,所需的输出将为test

r stringr dplyr

4
推荐指数
1
解决办法
740
查看次数

粘贴具有不同分隔符的 3 个字符串时出现问题

也许它\xc2\xb4是无稽之谈,但我\xc2\xb4一直在玩paste和paste0但没有成功。

\n

我的数据框看起来像这样

\n
stck <-structure(list(haul = 1:11,\n         year = c(1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L)),\n         row.names = c(NA, 11L), class = "data.frame")\n
Run Code Online (Sandbox Code Playgroud)\n

我\xc2\xb4m 尝试生成如下代码:N83_01, N83_02, ...., N83_10

\n

也就是说,我想创建一个代码,粘贴当年的最后两个数字加上运输编号(以“两个数字”格式)。

\n

到目前为止,我无法\xc2\xb4t找到粘贴“N”的方法。这就是我所拥有的

\n
stck$cod_lance <- as.factor(ifelse (stck$lance >=1 & stck$lance <10, paste(str_sub(stck$fecha, 3, 4), stck$lance, sep="_0"),\n                                    paste(str_sub(stck$fecha, 3, 4), stck$lance, sep="_")))\n
Run Code Online (Sandbox Code Playgroud)\n

我怎样才能得到正确的输出?提前致谢。

\n

r paste dataframe stringr

4
推荐指数
2
解决办法
92
查看次数

为什么 R `stringr::str_extract('word.42',pattern = '\\d*')` 不会产生 `"42"`?

stringr::str_extract我有一个“字母数字”形式的字符串向量,我想使用在with pattern中实现的 RegEx 来提取数字"\\d*"。结果非常令人困惑:

# R 4.2.3
# install.packages('stringr')
library(stringr)

# case 1
str_extract('word 42', '\\d*')
# ""

# case 2 (?)
str_extract('42 word', '\\d*')
# "42"

# case 3
str_extract('word 42', '\\d+')
# "42"

# case 4 (?!)
str_extract('word 42', '\\d*$')
# "42"

# case 5
str_extract('42 word', '\\d*$')
# ""

Run Code Online (Sandbox Code Playgroud)

在所有情况下,预期结果都是"42"。我是正则表达式的新手,但这pattern = '\\d*'看起来非常简单 - 我将其理解为“匹配任意数量的连续数字字符”。

它不适用于情况 1 但适用于情况 2,这一事实本身就很违反直觉。然后使用时角色似乎颠倒了pattern = '\\d*$'(案例 4 和 5)。

我对其他函数(str_matchstr_match_all)进行了更多实验,但结果仍然不清楚。 …

regex r stringr

4
推荐指数
1
解决办法
63
查看次数

如何从右到左分割字符串,如Python的rsplit()?

假设一个向量:

xx.1 <- c("zz_ZZ_uu_d", "II_OO_d")
Run Code Online (Sandbox Code Playgroud)

我想从最右边分割出一个新的矢量,只分裂一次.预期结果将是:

c("zz_ZZ_uu", "d", "II_OO", "d").
Run Code Online (Sandbox Code Playgroud)

这就像python的rsplit()功能.我现在的想法是扭转字符串,并与分裂str_split()stringr.

更好的解决方案?

split r stringr stringi

3
推荐指数
1
解决办法
1328
查看次数

拆分一个字符串,其中大写字母在stringr中跟随小写字母

我有一个看起来像这样的字符串向量,我想将它拆分:

str <- c("Fruit LoopsJalapeno Sandwich", "Red Bagel", "Basil LeafBarbeque SauceFried Beef")

str_split(str, '[a-z][A-Z]', n = 3)

[[1]]
[1] "Fruit Loop"       "alapeno Sandwich"

[[2]]
[1] "Red Bagel"

[[3]]
[1] "Basil Lea"    "arbeque Sauc" "ried Beef"
Run Code Online (Sandbox Code Playgroud)

但我需要将这些字母保留在最后和单词的开头.

regex r stringr

3
推荐指数
1
解决办法
124
查看次数

使用Tidyverse将列表转换为矢量

以下是"R for Data Science"的简单示例:

df <- tribble(
  ~x1,
  "a,b,c",
  "d,e,f,g"
)
Run Code Online (Sandbox Code Playgroud)

现在我可以像这样创建一个list-column:

df <- df %>%
  mutate(x2 = stringr::str_split(x1, ","))
Run Code Online (Sandbox Code Playgroud)

现在数据看起来像这样:

# A tibble: 2 × 2
       x1        x2
    <chr>    <list>
1   a,b,c <chr [3]>
2 d,e,f,g <chr [4]>
Run Code Online (Sandbox Code Playgroud)

这是一个问题:如果我只有x2,我怎样才能从中恢复x1?

unnest() 不起作用,因为它改变了数据的形状.

r stringr dplyr tidyr purrr

3
推荐指数
1
解决办法
686
查看次数

R,stringr - 使用单个命令替换向量的所有元素中的多个字符

首先,我是R的新手和一般编程,所以如果这是一个愚蠢的问题,我道歉.

我有一个类似于这个的字符向量:

> vec <- rep(c("XabcYdef", "XghiYjkl"), each = 3)
> vec
[1] "XabcYdef" "XabcYdef" "XabcYdef" "XghiYjkl" "XghiYjkl" "XghiYjkl"
Run Code Online (Sandbox Code Playgroud)

使用stringr包,我想删除前导"X"并用" - "替换"Y".

我尝试了以下代码,但结果并不是我所希望的.看起来这些patternreplacement参数在输入向量上被回收:

> str_replace(vec, c("X", "Y"), c("", "-"))
[1] "abcYdef"  "Xabc-def" "abcYdef"  "Xabc-def" "abcYdef"  "Xabc-def"
Run Code Online (Sandbox Code Playgroud)

我可以实现2次调用函数的预期结果:

> vec <- rep(c("XabcYdef", "XghiYjkl"), each = 3)
> vec <- str_replace(vec, "X", "")
> vec <- str_replace(vec, "Y", "-")
> vec
[1] "abc-def" "abc-def" "abc-def" "ghi-jkl" "ghi-jkl" "ghi-jkl"
Run Code Online (Sandbox Code Playgroud)

有没有办法通过一个命令实现相同的目标?

r stringr

3
推荐指数
1
解决办法
1784
查看次数

标签 统计

r ×10

stringr ×10

dplyr ×3

regex ×2

dataframe ×1

paste ×1

purrr ×1

split ×1

string ×1

stringi ×1

strsplit ×1

tidyr ×1