在R

时间:2017-04-05 17:13:07

标签: r split

我需要将变量(字符串)拆分为不同的列。我的数据如下所示:

test.data <- data.frame(id=c(101,101,101,101,101),
level=c( "levels p3 trunk slide.level", "levels p3 shark.level", 
"levels p3 wedge.level", "levels p3 tricky.level", "levels p4 annoying lever.level"),
badge=c( "springboard badge s", "lever badge s", "lever badge s", 
"ramp badge s", "lever badge s"))

> test.data
   id                          level               badge
1 101    levels p3 trunk slide.level springboard badge s
2 101          levels p3 shark.level       lever badge s
3 101          levels p3 wedge.level       lever badge s
4 101         levels p3 tricky.level        ramp badge s
5 101 levels p4 annoying lever.level       lever badge s

我需要将“level”变量分为两个变量[pp,level]和“badge”变量分为两个变量[item,badge]。

我的数据应如下所示:

> test.data
   id         PP              Level                   Item          Badge
1 101        levels p3        trunk slide.level       springboard   badge s
2 101        levels p3        shark.level             lever         badge s
3 101        levels p3        wedge.level             lever         badge s
4 101        levels p3        tricky.level            ramp          badge s
5 101        levels p4        annoying lever.level    lever         badge s

请注意,test.data $ level变量以“space”开头。我试过strsplit()函数但无法解决它。有人可以帮忙吗?

最佳。

1 个答案:

答案 0 :(得分:2)

我们可以使用extract中的双tidyr来执行此操作。对于“级别”列,我们会匹配一个单词(\\w+),后跟一个或多个空格(\\s+),后跟另一个单词(\\w+),将其捕获为一个组(用括号((...))包裹,后跟一个或多个空格(\\s+)并捕获其余字符((.*))。同样,我们可以将另一列与另一列分开正则表达式

library(tidyr)
extract(test.data, level, into = c('pp', 'level'), '(\\w+\\s+\\w+)\\s+(.*)') %>% 
                 extract(badge, into = c('Item', 'Badge'), '(\\w+)\\s*(.*)')
#   id        pp                level        Item   Badge
#1 101 levels p3    trunk slide.level springboard badge s
#2 101 levels p3          shark.level       lever badge s
#3 101 levels p3          wedge.level       lever badge s
#4 101 levels p3         tricky.level        ramp badge s
#5 101 levels p4 annoying lever.level       lever badge s