2017-04-21 17 views
1

當我嘗試單獨使用(長)字符串值的列:如何單獨與tidyr較長stringvalues成兩列

df <- tbl_df(c("Indian | Londen", "Greek | Amsterdam", "Hamburger and BBQ | Paris du Nord")) 
df <- separate(df, col = value, into = c("var1","var2"), sep = " | ") 

我得到它說,有在三處值過多的警告消息而當我看到改變的數據幀我沒有得到期望的DF

# A tibble: 3 × 2 
     var1 var2 
*  <chr> <chr> 
1 Indian  | 
2  Greek  | 
3 Hamburger and 

似乎在每個空間分割,沒有人知道一個方法來解決此問題? var2應該包含城市或地區名稱,謝謝。

回答

1

單獨解釋爲sep參數爲正則表達式時,它是字符。所以,你需要逃避|這是正則表達式,圖案|(空格或空格)特殊字符()是相同正則表達式一個空白,這就是爲什麼你的字符串之間用空格分開:

df <- separate(df, col = value, into = c("var1","var2"), sep = " \\| ") 

df 
# A tibble: 3 × 2 
#    var1   var2 
#*    <chr>   <chr> 
#1   Indian  Londen 
#2    Greek  Amsterdam 
#3 Hamburger and BBQ Paris du Nord 
1

只要做到:

由於管具有正則表達式中有特殊的含義,它的意思是「OR」,因此你必須先逃避它。你還可以用它在字符類[|]得到相同的結果

df1 <- separate(df, col = value, into = c("var1","var2"), sep = "\\|") 

OR

df1 <- separate(df, col = value, into = c("var1","var2"), sep = "[|]") 

基礎R方式:

dfx<- data.frame(do.call("rbind",strsplit(df$value,split="\\|"))) 

輸出:

> dfx 
        X1    X2 
1   Indian   Londen 
2    Greek  Amsterdam 
3 Hamburger and BBQ Paris du Nord