2016-04-13 45 views
3

我有一个数据集:如何分割一个字符串与tidyr ::独立于R并保留分隔符字符串的值?

crimes<-data.frame(x=c("Smith", "Jones"), charges=c("murder, first degree-G, manslaughter-NG", "assault-NG, larceny, second degree-G")) 

我使用tidyr:分开的收费栏上用火柴分裂“G”,

crimes<-separate(crimes, charges, into=c("v1","v2"), sep="G,") 

这种分裂我的专栏,但是移除分隔符“G”。我想在结果栏拆分中保留“G”。

我所需的输出是:

x   v1      v2 
Smith  murder, first degree-G manslaughter-NG 
Jones  assault-NG    larceny, second degree-G 

任何建议表示欢迎。

+2

你想要的输出是什么? –

+2

'sep =“(?<= G),”'? –

+2

看着数据,看起来像'sep =',''将是实际的选择。 – alistaire

回答

4

UPDATE

这是你要求什么。请记住,你的数据不整洁(V1和V2具有每列内不止一个变量)

A<-separate(crimes,charges,into=c("V1","V2"),sep = "(?<=G,)") 
A 
     x      V1      V2 
1 Smith murder, first degree-G,   manslaughter-NG 
2 Jones    assault-NG, larceny, second degree-G 

更简单的方法来获得保持“G”或“NG”是使用正如alistaire所说的那样。

A<-separate(crimes, charges, into=c("v1","v2"), sep = ', ') 

这给

 x   v1    v2 
1 Smith murder-G manslaughter-NG 
2 Jones assault-NG  larceny-G 

如果你想保持分离的data.frame(使用 - )

separate(A, v1, into = c("v3","v4"), sep = "-") 

,让

 x  v3 v4    v2 
1 Smith murder G manslaughter-NG 
2 Jones assault NG  larceny-G 

你需要为v2列再次执行此操作。我不知道你是否想保持分离,请发布你的预期输出,以使我的答案更具体。

+0

对不起,我的示例没有包含我的数据的实际情况,它与逗号混合在一起收费。因此,“G”是必要的,因为提取器字符串与存在的“,”不同。 – TDog

+0

而我的理想输出是: x v1 v2 1 Smith谋杀-G误杀-UN – TDog

+0

巨大的道具@Matias Andina。这很好。现在进一步清洁。如您所述,我的数据不整洁。还没有。 – TDog

相关问题