相关疑难解决方法(0)

正则表达式仅用于替换括号外的特定字符

我正在寻找正则表达式(最好是 in R),它可以用 say 替换(任意数量的)特定字符;say;;但仅当文本字符串内的括号内不存在()

注意: 1. 括号内也可能存在多个替换字符

2.数据/向量中没有嵌套括号

例子

  • text;othertext 替换为 text;;othertext
  • text;other(texttt;some;someother);more要替换为text;;other(texttt;some;someother);;more. (即;仅在外部()被替换文本替换)

如果需要澄清,我会尝试解释

in_vec <- c("abcd;ghi;dfsF(adffg;adfsasdf);dfg;(asd;fdsg);ag", "zvc;dfasdf;asdga;asd(asd;hsfd)", "adsg;(asdg;ASF;DFG;ASDF;);sdafdf", "asagf;(fafgf;sadg;sdag;a;gddfg;fd)gsfg;sdfa")

in_vec
#> [1] "abcd;ghi;dfsF(adffg;adfsasdf);dfg;(asd;fdsg);ag"
#> [2] "zvc;dfasdf;asdga;asd(asd;hsfd)"             
#> [3] "adsg;(asdg;ASF;DFG;ASDF;);sdafdf"           
#> [4] "asagf;(fafgf;sadg;sdag;a;gddfg;fd)gsfg;sdfa"
Run Code Online (Sandbox Code Playgroud)

预期输出(手动计算)

[1] "abcd;;ghi;;dfsF(adffg;adfsasdf);;dfg;;(asd;fdsg);;ag" 
[2] "zvc;;dfasdf;;asdga;;asd(asd;hsfd)"             
[3] "adsg;;(asdg;ASF;DFG;ASDF;);;sdafdf"            
[4] "asagf;;(fafgf;sadg;sdag;a;gddfg;fd)gsfg;;sdfa"
Run Code Online (Sandbox Code Playgroud)

regex r string-substitution gsub

7
推荐指数
1
解决办法
263
查看次数

需要使用 R 从字符串列中提取单个字符

背景

下面是我的dput形式的游戏数据数据集——它包含一些 MLB 游戏的得分。

structure(list(team = c("NYM", "NYM", "BOS", "NYM", "BOS"), linescore = c("010000000", 
"(10)1140006x", "002200010", "00000(11)01x", "311200"), ondate = structure(c(18475, 
18476, 18487, 18489, 18494), class = "Date")), class = "data.frame", row.names = c(NA, 
-5L))
Run Code Online (Sandbox Code Playgroud)

例如,这是一行得分:“002200010”。

有些行分数以“x”结尾,有些在括号中包含两位数值,如“00000(11)01x”。不在括号中的每个数字表示球队在局中得分的次数。如果一支球队在一局中得分超过 9 分,则数字放在括号中,因此在得分“00000(11)01x”行中,该球队在第六局中得分为 11 分,但没有在最后一局击球。第九个(用“x”表示)。

并非每条线得分都有九局。有些有更多,有些只有六个。

我需要做什么

首先,我需要做的是获取一个团队在每一局中得分的次数,例如第一、第二、第三等,并将每个得分放在一个新列中。我更喜欢使用 dplyr 的解决方案。

我已经查看了 stackoverflow 的建议解决方案,但没有发现符合我需要的解决方案。如果有的话,如果你能分享它的网址,我将不胜感激。

我尝试使用以下代码来做到这一点:

gamedata %>%
  select(ondate, team, linescore) %>%
  mutate(inng1 = str_extract(linescore, "\\d|\\(\\d{2}\\)"))
Run Code Online (Sandbox Code Playgroud)

这是输出:

ondate      team linescore    inng1
2020-08-01  NYM 010000000       0   
2020-08-02  NYM (10)1140006x  (10) …
Run Code Online (Sandbox Code Playgroud)

regex string r dplyr

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

标签 统计

r ×2

regex ×2

dplyr ×1

gsub ×1

string ×1

string-substitution ×1