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