2017-03-06 73 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