我有下表:
column1 column2
1 aaa^bbb
2 aaa^bbb|ccc^ddd
我想要一个输出文件如下:
column1 column2 column3
1 aaa bbb
2 aaa bbb
3 ccc ddd
如果有聪明的方法,你能否告诉我?
我试图做两件事;
对于^,我想将上下文分为第2列和第3列。
对于|,我想将它分隔到下一行,但在column1中保持相同的数字(第1行和第3行的列1相同。抱歉我在这里犯了错误。
要重写,输入如下:
column1 column2
x aaa^bbb
y aaa^bbb|ccc^ddd
输出如下:
column1 column2 column3
x aaa bbb
y aaa bbb
y ccc ddd
答案 0 :(得分:5)
最简单的方法就是使用strsplit
。例如,
> x = c("aaa^bbb", "aaa^bbb|ccc^ddd")
> ## Split the vector on ^ OR |.
> ## Since ^ and | are special characters
> ## we need to escape them: \\^ and \\|
> ## Split by column.
> new_x = unlist(strsplit(x, "\\|"))
> ## Split by row
> new_x = unlist(strsplit(new_x, "\\^"))
> new_x
[1] "aaa" "bbb" "aaa" "bbb" "ccc" "ddd"
> ## Change the vector back into a matrix
> dim(new_x) = c(2,3)
> ## Transpose to get correct shape
> t(new_x)
[,1] [,2]
[1,] "aaa" "bbb"
[2,] "aaa" "bbb"
[3,] "ccc" "ddd"
您可能会将拆分步骤结合起来,但我对您的数据格式知之甚少,无法确信它始终有效。