我有一个数据集:
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
欢迎任何建议。
答案 0 :(得分:5)
<强>更新强>
这就是你要求的。请记住,您的数据不整齐(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所说的sep=", "
。
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列执行此操作。我不知道你是否想继续分离,请发布你的预期输出,以使我的答案更具体。
答案 1 :(得分:0)
用正则表达式替换<yourRegexPattern>
如果要在左侧栏中显示“ sep”(向后看)
dataframe %>% separate(column_to_sep, into = c("newCol1", "newCol2"), sep="(?<=<yourRegexPattern>)")
如果要在右侧栏中输入“ sep”(向前看)
dataframe %>% separate(column_to_sep, into = c("newCol1", "newCol2"), sep="(?=<yourRegexPattern>)")
还要注意,当您尝试从一组数字中分离一个单词(即Auguest1990
到August
和1990
)时,您需要确保读取整个模式。
示例:
dataframe %>% separate(column_to_sep, into = c("newCol1", "newCol2"), sep="(?=[[:digit:]])", extra="merge")