【问题标题】:Strip Elements from a String Depending on a Pattern - Regex R根据模式从字符串中剥离元素 - 正则表达式 R
【发布时间】:2021-12-28 05:03:49
【问题描述】:

需要一些正则表达式帮助。有一些大学篮球维加斯传播的数据框。本质上,如果 VegasOpen 中的字符串以数字开头,后跟“o”表示“over”或“u”表示 under,那么我需要第三个元素。但如果字符串不是以前面提到的条件开头,那么我想检索第一个元素。

如果主队受到青睐,则字符串以比赛的大小(144.5、139 等)开头。

如果客队受青睐,则优先列出他们受青睐的金额(第 3 行和第 4 行)。

理想情况下,从 HOME 团队的角度来看,我最终会得到一个带有 VegasOpen 点差的数据框。以第 3 行和第 4 行为例,其中客队受到青睐:客队的线分别为 -3 和 -6。但从主队的角度来看,应该显示为正 3 和正 6。

这是我的数据:

home_team_name     away_team_name     VegasOpen          
Syracuse           Brown              144½u-10-10½ -10   
Xavier             Connecticut        139u-10-3 -10     
Northern Illinois  Ball State         -3 -10137u-10     
Pittsburgh         Notre Dame         -6 -10127½u-10   
Boise State        Fresno State       119½u-10-4 -10  
St. Marys (CA)     Yale               132u-10-12½ -10   
Texas Tech         Alabama State      135½u-10-29 -10    
Gonzaga            North Alabama      142½u-10-32 -10    
Baylor             Northwestern State 145½u-10-37 -10   
Texas              Incarnate Word     128½u-10-31 -10    
Southern Illinois  Grambling State    126½u-10-16 -10    

期望的输出:

home_team_name     away_team_name     VegasOpen_home   
Syracuse           Brown              -10.5           
Xavier             Connecticut        -3             
Northern Illinois  Ball State          3                 
Pittsburgh         Notre Dame          6                
Boise State        Fresno State       -4                  
St. Marys (CA)     Yale               -12.5            
Texas Tech         Alabama State      -29              
Gonzaga            North Alabama      -32             
Baylor             Northwestern State -37            
Texas              Incarnate Word     -31              
Southern Illinois  Grambling State    -16              

@Onyambu 您的代码有效。但是一旦有游戏不可避免地列出“143o”而不是“143u”,它就不起作用了。假设我们的字符串是 143o-15-9½ -10 和 129o-20-13 EV。我怎样才能应用您的正则表达式来解释这些变化?

【问题讨论】:

  • sub('^[^-]+u-[^-]+-([^-]+).*|^(-\\d+).*', '\\1\\2', df$VegasOpen)

标签: r regex dplyr data-manipulation


【解决方案1】:
transform(df, vegasopen_home = sub('^[^-]+u-[^-]+(-[^- ]+).*|^-(\\d+).*', '\\1\\2', VegasOpen))
      home_team_name     away_team_name        VegasOpen vegasopen_home
1           Syracuse              Brown 144½u-10-10½ -10           -10½
2             Xavier        Connecticut    139u-10-3 -10             -3
3  Northern Illinois         Ball State    -3 -10137u-10              3
4         Pittsburgh         Notre Dame   -6 -10127½u-10              6
5        Boise State       Fresno State   119½u-10-4 -10             -4
6     St. Marys (CA)               Yale  132u-10-12½ -10           -12½
7         Texas Tech      Alabama State  135½u-10-29 -10            -29
8            Gonzaga      North Alabama  142½u-10-32 -10            -32
9             Baylor Northwestern State  145½u-10-37 -10            -37
10             Texas     Incarnate Word  128½u-10-31 -10            -31
11 Southern Illinois    Grambling State  126½u-10-16 -10            -16

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多