首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符值分离为矩阵中的正则表达式

如何将字符值分离为矩阵中的正则表达式
EN

Stack Overflow用户
提问于 2019-09-23 08:06:21
回答 2查看 63关注 0票数 3

数据示例:

代码语言:javascript
复制
X <- as.matrix(c("2019.01.01 (TUE) A STADIUM       [spectator : 4000]", "2019.01.01 (TUE) C STADIUM       [spectator : 3600]", "2018.01.02 (WED) B STADIUM       [spectator : 2800]", "2019.01.02 (WED) D STADIUM       [spectator : 3500]"))
X
     [,1]                                                  
[1,] 2019.01.01 (TUE) A STADIUM       [spectator : 4000]
[2,] 2019.01.01 (TUE) C STADIUM       [spectator : 3600]
[3,] 2018.01.02 (WED) B STADIUM       [spectator : 2800]
[4,] 2019.01.02 (WED) D STADIUM       [spectator : 3500]

我想分开这个数据帧3或4列。如下所示:

代码语言:javascript
复制
         Day Day2    STADIUM   Spectator                                    
1 2019.01.01 TUE   A STADIUM    4000
2 2019.01.01 TUE   C STADIUM    3600
3 2018.01.02 WED   B STADIUM    2800
4 2019.01.02 WED   D STADIUM    3500

我尝试过的str_split返回列表。所以我用了str_split_fixed。这是必需的n值。我分配了n= 4,但它将标点符号向前分开。

代码语言:javascript
复制
str_split_fixed(X, n = 4, '[[:punct:]]')
     [,1]   [,2] [,3]  [,4]                                     
[1,] "2019" "01" "01 " "TUE) A STADIUM       [spectator : 4000]"
[2,] "2019" "01" "01 " "TUE) C STADIUM       [spectator : 3600]"
[3,] "2018" "01" "02 " "WED) B STADIUM       [spectator : 2800]"
[4,] "2019" "01" "02 " "WED) D STADIUM       [spectator : 3500]"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 08:19:06

我们可以通过定义捕获组来提取tidyr::extract

代码语言:javascript
复制
tidyr::extract(data.frame(X), X, into = c("Day", "Day2", "Stadium", "Spectator"), 
           regex = "(.*)\\((.*)\\).*([A-Z]+ STADIUM).*spectator : (\\d+)")

#         Day  Day2   Stadium Spectator
#1 2019.01.01   TUE A STADIUM      4000
#2 2019.01.01   TUE C STADIUM      3600
#3 2018.01.02   WED B STADIUM      2800
#4 2019.01.02   WED D STADIUM      3500

我们在这里定义了4个捕获组。

( 1)从文本的开头开始,直到遇到开头的圆括号。

( 2)开头和结尾方括号之间的案文。

( 3)来自[A-Z]的一个或多个字符,后面跟着单词"STADIUM"

( 4)逐字"spectator"

票数 3
EN

Stack Overflow用户

发布于 2019-09-23 08:22:44

你可以:

代码语言:javascript
复制
X <- c("2019.01.01 (TUE) A STADIUM       [spectator : 4000]", "2019.01.01 (TUE) C STADIUM       [spectator : 3600]", "2018.01.02 (WED) B STADIUM       [spectator : 2800]", "2019.01.02 (WED) D STADIUM       [spectator : 3500]")
Dat <- read.table(text=X)[c(1:3, 7)]
names(Dat) <- c("Day", "Day2", "STADIUM", "Spectator")
Dat$Spectator <- sub("]", "", Dat$Spectator, fixed = TRUE)
Dat$Day2 <- substr(Dat$Day2, 2, 4)
Dat
# > Dat
#          Day Day2 STADIUM Spectator
# 1 2019.01.01  TUE       A      4000
# 2 2019.01.01  TUE       C      3600
# 3 2018.01.02  WED       B      2800
# 4 2019.01.02  WED       D      3500
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58058093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档