将超级英雄名称及其年龄在给定向量中分割

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将超级英雄名称及其年龄在给定向量中分割相关的知识,希望对你有一定的参考价值。

将超级英雄名称及其年龄在给定向量中分割:

vector <- c("Superman1000", "Batman35", "Wonderwoman240") 

我想分割超级英雄的名字和年龄。我正在尝试,但是以某种方式无法做到。

df=data.frame(vector= c("Superman1000", "Batman35", "Wonderwoman240"))

library(stringr)
library(stringi)
library(dplyr)

df %>% separate(vector, c("A", "B"))

我尝试这个,但无法得到答案。

答案

如果数据与显示的相同,我们可以删除所有数字以获取超级英雄名称,并删除所有非数字以获取年龄。

df$super_hero <- gsub("\\D", "", df$vector)
df$super_hero_age <- gsub("\\d+", "", df$vector)

或带有tidyr::extract

tidyr::extract(df, vector, into = c("name", "age"),regex = "(.*\\D)(\\d+)")

#         name  age
#1    Superman 1000
#2      Batman   35
#3 Wonderwoman  240

如@ A5C1D2H2I1M1N2O1R2T1所述,我们也可以使用strcapture

strcapture("(.*\\D)(\\d+)", df$vector, 
           proto = data.frame(superhero = character(), age = integer()))
另一答案

我们可以在使用read.csv的数字部分之前创建定界符之后使用base R中的sub

read.csv(text = sub("(\\d+)", ",\\1", df$vector), header = FALSE,
      stringsAsFactors = FALSE, col.names = c('name', 'age'))
#        name  age
#1    Superman 1000
#2      Batman   35
#3 Wonderwoman  240

或者另一个选项是separate,我们在其中指定了正则表达式环顾四周

library(tidyr)
separate(df, vector, into = c("name", "age"), sep= "(?<=[a-z])(?=\\d)")
#         name  age
#1    Superman 1000
#2      Batman   35
#3 Wonderwoman  240

以上是关于将超级英雄名称及其年龄在给定向量中分割的主要内容,如果未能解决你的问题,请参考以下文章

将引导主题超级英雄添加到 Visual Studio 2017 C# mvc 项目中

[bzoj1191]超级英雄

用超级英雄的方式打开“多云”

[HNOI2006]超级英雄Hero

BZOJ 1191 超级英雄(二分图匹配)

BZOJ1191: [HNOI2006]超级英雄Hero