根据不同的符号将列拆分为多列

时间:2017-03-06 17:08:45

标签: r

我有一个这样的数据框:

 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

我试图在“stringr”包中使用“str_split”,但似乎无法识别“..”

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

我相信还有很多其他方法可以做到。谢谢

2 个答案:

答案 0 :(得分:1)

我们可以使用separate

中的tidyr
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 :(得分:1)

@akrun提供了一个很好的解决方案

我只会添加str_splitstrsplit无法识别&#34; ...&#34;的原因,这是因为句号。 R中的元字符具有特殊含义:句点。匹配任何单个字符。

要与strsplit一起使用,您可以使用:

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

请参阅Regular Expressions as used in R