如何将字符列分成两列?

Rut*_*uth 0 r tidyr

这就是我所拥有的:

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

Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个:

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

Run Code Online (Sandbox Code Playgroud)

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

Ron*_*hah 5

您可以使用extracttidyr

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
Run Code Online (Sandbox Code Playgroud)

或者在基数 R 中:

transform(df, fictionality = sub('hero|villain', '', condition), 
              type = sub('fic|real', '', condition))
Run Code Online (Sandbox Code Playgroud)

数据

df <- structure(list(condition = c("fichero", "fichero", "realhero", 
"realhero", "ficvillain", "ficvillain", "realvillain", "realvillain"
), uncomfortable = c(1L, 1L, 1L, 2L, 4L, 5L, 8L, 3L)), 
class = "data.frame", row.names = c(NA, -8L))
Run Code Online (Sandbox Code Playgroud)