2017-04-05 7 views
0

変数(文字列)を別の列に分割する必要があります。私のデータは次のようになります。Rの文字列変数を分割する

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 

は、私は2つの変数[アイテム、バッジ]に二つの変数[PP、レベル]および「バッジ」変数に「レベル」変数を分割する必要があります。

私のデータは次のようになります。

> 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の$レベルの変数は、「スペース」で始まることに注意してください。 strsplit()関数を試しましたが、解決できませんでした。誰かがこれを助けることができますか?

ベスト。

答えて

2

extractからtidyrまでの倍数でこれを行うことができます。 「レベル」列については、単語(\\w+)の後に1つ以上の空白(\\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 
+0

おかげで他の列を分離することができます。あなたはこの「(\\ワットの+を何説明してもらえ\ \ s + \ w +)\\ s +(。*) ')の略語? – amisos55

+0

@ amisos55私はいくつかの説明で投稿を更新しました。希望を助けてください – akrun

+1

あなたの助けをありがとう。大変感謝しています! – amisos55

関連する問題