Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将字符串中的特殊字符提取到新列_R_Dplyr_Extract_Special Characters_Tidyr - Fatal编程技术网

R 将字符串中的特殊字符提取到新列

R 将字符串中的特殊字符提取到新列,r,dplyr,extract,special-characters,tidyr,R,Dplyr,Extract,Special Characters,Tidyr,我读了很多其他的答案,但似乎并没有找到我需要的。我试图创建一个NFL球队记录数据的数据库,但我在正确创建“种子”的新变量和保存数据方面遇到了困难。所以我有一些NFL球队的名字,名字的末尾有特殊的字符,表示赢得了他们的分区或外卡季后赛席位,我想保留这些。例如,以下是我的df: Tm New England Patriots* Buffalo Bills+ New York Jets Miami Dolphins 我知道这是可行的,但似乎不是正确的方法 #create new variable o

我读了很多其他的答案,但似乎并没有找到我需要的。我试图创建一个NFL球队记录数据的数据库,但我在正确创建“种子”的新变量和保存数据方面遇到了困难。所以我有一些NFL球队的名字,名字的末尾有特殊的字符,表示赢得了他们的分区或外卡季后赛席位,我想保留这些。例如,以下是我的df:

Tm
New England Patriots*
Buffalo Bills+
New York Jets
Miami Dolphins
我知道这是可行的,但似乎不是正确的方法

#create new variable of "Seed"
df <- df %>% dplyr::mutate(Seed = Tm)

#remove all but special characters from "Seed"
df$Seed=gsub("[A-z0-9. ]", "", df$Seed)

#remove special characters from "Tm"
df$Tm=gsub("[\\*\\+]", "", df$Tm)
在伪代码中:创建新变量“Seed”->从“Tm”中提取并删除特殊字符“*”&“+”,并转移到新变量“Seed”->如果“Tm”不包含“*”或“+”,则在“Seed”中保留相应列为空

正确的做法是什么


非常感谢您的帮助,谢谢

下面是一个使用stringr的tidyverse解决方案

library("stringr")
library("dplyr")

df <- tibble(Tm = c("New England Patriots*", "Buffalo Bills+", "New York Jets"))

df <- df %>%
  mutate(
    Seed = str_extract(Tm, "[\\+\\*]$"),
    Tm = str_replace(Tm, "[\\+\\*]$", "")
  )

> df
# A tibble: 3 x 2
  Tm                   Seed
  <chr>                <chr>
1 New England Patriots *
2 Buffalo Bills        +
3 New York Jets        NA
库(“stringr”)
图书馆(“dplyr”)
df-df
#一个tibble:3x2
Tm种子
1新英格兰爱国者*
2张布法罗钞票+
3架纽约喷气式飞机

下面是一个使用stringr的tidyverse解决方案

library("stringr")
library("dplyr")

df <- tibble(Tm = c("New England Patriots*", "Buffalo Bills+", "New York Jets"))

df <- df %>%
  mutate(
    Seed = str_extract(Tm, "[\\+\\*]$"),
    Tm = str_replace(Tm, "[\\+\\*]$", "")
  )

> df
# A tibble: 3 x 2
  Tm                   Seed
  <chr>                <chr>
1 New England Patriots *
2 Buffalo Bills        +
3 New York Jets        NA
库(“stringr”)
图书馆(“dplyr”)
df-df
#一个tibble:3x2
Tm种子
1新英格兰爱国者*
2张布法罗钞票+
3架纽约喷气式飞机

您也可以使用tidyr的
提取功能来完成此操作

library(tidyr)
df%
extract(col=Tm,regex=“^([^\\\\\\+])([\\\\\\\*]?)$”,
into=c(“Tm”、“Seed”))
#>Tm种子
#>1新英格兰爱国者*
#>2张布法罗钞票+
#>3架纽约喷气式飞机
#>4只迈阿密海豚

由(v0.3.0)于2020年6月14日创建,您也可以使用tidyr的
提取功能来完成此操作

library(tidyr)
df%
extract(col=Tm,regex=“^([^\\\\\\+])([\\\\\\\*]?)$”,
into=c(“Tm”、“Seed”))
#>Tm种子
#>1新英格兰爱国者*
#>2张布法罗钞票+
#>3架纽约喷气式飞机
#>4只迈阿密海豚

由(v0.3.0)于2020年6月14日创建

#Extract + or * at the end of the string 
temp <- regmatches(df$Tm, gregexpr('[+*]$', df$Tm))
#Replace 0 length characters with NA
temp[lengths(temp) == 0] <- NA
#Assign as new column
df$Seed <- unlist(temp)
#Remove from original column
df$Tm <- sub('[+*]$', '', df$Tm) 
df
#                    Tm Seed
#1 New England Patriots    *
#2        Buffalo Bills    +
#3        New York Jets <NA>
#4       Miami Dolphins <NA>
#在字符串末尾提取+或*

这里有一个基本的R方法:

#Extract + or * at the end of the string 
temp <- regmatches(df$Tm, gregexpr('[+*]$', df$Tm))
#Replace 0 length characters with NA
temp[lengths(temp) == 0] <- NA
#Assign as new column
df$Seed <- unlist(temp)
#Remove from original column
df$Tm <- sub('[+*]$', '', df$Tm) 
df
#                    Tm Seed
#1 New England Patriots    *
#2        Buffalo Bills    +
#3        New York Jets <NA>
#4       Miami Dolphins <NA>
#在字符串末尾提取+或*

这太棒了,非常感谢!如果您希望对没有特殊字符的行使用空格而不是NA,这需要少一步。这很好,非常感谢!如果您希望对没有特殊字符的行使用空格而不是NA,则需要少一步。
strcapture((.+?)(\\W*$)、df$Tm、data.frame(Tm=character()、speed=character())
strcapture(.+?)(\\W*$)、df$Tm、data.frame(Tm=character()、speed=character())