我有一个包含多个的数据集,我想characters从该sr列中提取前两个。最后,这些字符将存储在一个新列中。
基本上,我想要一个新列permit_type,其中包含srieAP和SP的前两个字符值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) 我想在不同的列中找到一个单词并在新的列中对其进行变异。
“数据”是一个例子,“目标”是我想要的。我尝试了很多,但没有得到工作。
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) 假设我有一个字符串:
StringA/StringB/StringC
Run Code Online (Sandbox Code Playgroud)
有什么方法可以按/符号拆分该字符串,但将其保留在返回值中:
StringA
/StringB
/StringC
Run Code Online (Sandbox Code Playgroud) 我有一个混乱的字符变量,例如:
df<-c("_oun_", "0000ff", "03815", "?3jhdb", "test", "1,000", "1.000")
Run Code Online (Sandbox Code Playgroud)
我想过滤掉所有不是单词的值。我认为首先要过滤掉所有不以字符开头的值。
我怎样才能做到这一点tidyverse?对于上面提到的示例,所需的输出将为test。
也许它\xc2\xb4是无稽之谈,但我\xc2\xb4一直在玩paste和paste0但没有成功。
\n我的数据框看起来像这样
\nstck <-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")\nRun Code Online (Sandbox Code Playgroud)\n我\xc2\xb4m 尝试生成如下代码:N83_01, N83_02, ...., N83_10
也就是说,我想创建一个代码,粘贴当年的最后两个数字加上运输编号(以“两个数字”格式)。
\n到目前为止,我无法\xc2\xb4t找到粘贴“N”的方法。这就是我所拥有的
\nstck$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="_")))\nRun Code Online (Sandbox Code Playgroud)\n我怎样才能得到正确的输出?提前致谢。
\nstringr::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_match和str_match_all)进行了更多实验,但结果仍然不清楚。 …
假设一个向量:
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.
更好的解决方案?
我有一个看起来像这样的字符串向量,我想将它拆分:
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)
但我需要将这些字母保留在最后和单词的开头.
以下是"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的新手和一般编程,所以如果这是一个愚蠢的问题,我道歉.
我有一个类似于这个的字符向量:
> vec <- rep(c("XabcYdef", "XghiYjkl"), each = 3)
> vec
[1] "XabcYdef" "XabcYdef" "XabcYdef" "XghiYjkl" "XghiYjkl" "XghiYjkl"
Run Code Online (Sandbox Code Playgroud)
使用stringr包,我想删除前导"X"并用" - "替换"Y".
我尝试了以下代码,但结果并不是我所希望的.看起来这些pattern和replacement参数在输入向量上被回收:
> 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)
有没有办法通过一个命令实现相同的目标?