如何将字符列分为两列?

时间:2020-08-14 07:55:18

标签: r tidyr

这就是我所拥有的:

condition    uncomfortable
   <fct>             <dbl>
 fichero               1
 fichero               1
 realhero              1
 realhero              2
 ficvillain            4
 ficvillain            5
 realvillain           8
 realvillain           3

我怎么得到这个:

fictionality    character type    uncomfortable
   
 fic                hero              1
 fic                hero              1
 real               hero              1
 real               hero              2
 fic                villain           4
 fic                villain           5
 real               villain           8
 real               villain           3

也许separate()strsplit()在这里很有用,但我不知道如何使用它们。

2 个答案:

答案 0 :(得分:5)

您可以使用.json()中的extract

tidyr

或者在基数R中:

tidyr::extract(df, condition, c('fictionality', 'type'), '(fic|real)(hero|villain)')

# fictionality    type uncomfortable
#1          fic    hero             1
#2          fic    hero             1
#3         real    hero             1
#4         real    hero             2
#5          fic villain             4
#6          fic villain             5
#7         real villain             8
#8         real villain             3

数据

transform(df, fictionality = sub('hero|villain', '', condition), 
              type = sub('fic|real', '', condition))

答案 1 :(得分:1)

要补充 @RonakShah 的答案,您还可以使用separate()中的tidyr并将其分隔符设置为"(?<=a)(?=b)"

tidyr::separate(df, condition, c('fictionality', 'type'), sep = '(?<=fic|real)(?=hero|villain)')

#   fictionality    type uncomfortable
# 1          fic    hero             1
# 2          fic    hero             1
# 3         real    hero             1
# 4         real    hero             2
# 5          fic villain             4
# 6          fic villain             5
# 7         real villain             8
# 8         real villain             3