2017-03-06 79 views
-2

我有這樣一個數據幀:拆分列到多發柱根據不同的符號

V1 V2 V3 
a b X:12..500(1) 
c d Y:34..1000(-1) 

而且我想最後一欄分成不同的列

V1 V2 V3 V4 V5 V6 
a b X 12 500 1 
c d Y 34 1000 -1 

我曾嘗試使用「str_split」包在「stringr」中,但似乎無法識別「..」

test <-data.frame(str_split_fixed(df$V3,":",2)) 

我相信有很多其他方式來做到這一點。由於

回答

1

我們可以使用separatetidyr

library(tidyr) 
separate(transform(df1, V3 = gsub("[:.()]+", ",", V3)), V3, 
       into = paste0("V", 3:6), sep=",") 
# V1 V2 V3 V4 V5 V6 
#1 a b X 12 500 1 
#2 c d Y 34 1000 -1 

使用或不使用任何軟件包

cbind(df1[-3], read.table(text= sub(",$", "", 
    gsub("[:.()]+", ",", df1$V3)), sep=",", col.names = paste0("V", 3:6))) 
1

@akrun提供了一個很好的解決方案

我只是補充的原因str_splitstrsplit不承認「..」,這是因爲期限。是R中的一個元字符,具有特殊的含義:句號。匹配任何單個字符。

要與strsplit使用,您可以使用:

a="X:12..500(1)" 
strsplit(a, split="\\..") 
strsplit(a, split="..", fixed=TRUE) 
strsplit(a, split="[.].") 

Regular Expressions as used in R