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