5

YARQ (さらに別の正規表現の質問)。

最後の列に文の最後の単語が含まれ、最初の列に他のすべてが含まれていることを確認して、次の列を 2 つの列に分割するにはどうすればよいでしょうか。

x <- c("This is a test",
       "Testing 1,2,3 Hello",
       "Foo Bar",
       "Random 214274(%*(^(* Sample",
       "Some Hyphenated-Thing"
       )

私が終わるように:

col1                         col2
this is a                    test
Testing 1,2,3                Hello
Foo                          Bar
Random 214274(%*(^(*         Sample
Some                         Hyphenated-Thing
4

4 に答える 4

9

これは先を見据えた仕事のように見えます。スペースの後にスペースではないものが続きます。

split <- strsplit(x, " (?=[^ ]+$)", perl=TRUE)
matrix(unlist(split), ncol=2, byrow=TRUE)

     [,1]                   [,2]              
[1,] "This is a"            "test"            
[2,] "Testing 1,2,3"        "Hello"           
[3,] "Foo"                  "Bar"             
[4,] "Random 214274(%*(^(*" "Sample"          
[5,] "Some"                 "Hyphenated-Thing"
于 2013-03-21T04:54:32.890 に答える
4

これが使用する方法strsplitです:

do.call(rbind,
  lapply(
    strsplit(x," "),
    function(y)
      cbind(paste(head(y,length(y)-1),collapse=" "),tail(y,1))
    )
)

またはを使用した代替実装sapply

t(
  sapply(
    strsplit(x," "),
    function(y) cbind(paste(head(y,length(y)-1),collapse=" "),tail(y,1))
  )
)

その結果:

     [,1]                   [,2]              
[1,] "This is a"            "test"            
[2,] "Testing 1,2,3"        "Hello"           
[3,] "Foo"                  "Bar"             
[4,] "Random 214274(%*(^(*" "Sample"          
[5,] "Some"                 "Hyphenated-Thing"
于 2013-03-21T04:54:41.467 に答える
1

「単語」が英数字であると仮定します (この場合の最後の単語は one または letters\\wまたは digits\\dであり、必要に応じてさらにクラスを追加できます):

col_one = gsub("(.*)(\\b[[\\w\\d]+)$", "\\1", x, perl=TRUE)
col_two = gsub("(.*)(\\b[[\\w\\d]+)$", "\\2", x, perl=TRUE)

出力:

> col_one
[1] "This is a "            "Testing 1,2,3 "        "Foo "                 
[4] "Random 214274(%*(^(* "
> col_two
[1] "test"   "Hello"  "Bar"    "Sample"
于 2013-03-21T04:38:01.780 に答える
0

これはあなたのためではないかもしれませんが、誰かがpython でこれを行う方法を疑問に思っていた場合:

#col1:
print line.split(" ")[:-1]

#col2:
print line.split(" ")[-1]

col1 はリストとして出力されることに注意してください。これは、次のような文字列にすることができます。

#col1:
print " ".join(line.split(" ")[:-1])
于 2013-03-21T06:41:03.207 に答える