按特定标记拆分数据框中列的值,并将其添加为额外行

use*_*113 1 string split r dataframe

假设我有以下数据框

> df <- data.frame(var1 = c("A", "B", "C", "D"),            
                 var2 = c("test", "5 | 6", "X & Y", "M | N | O"))
> df
  var1          var2
1    A          test
2    B         5 | 6
3    C         X & Y
4    D     M | N | O
Run Code Online (Sandbox Code Playgroud)

我怎样才能在分裂值var2|&运营商,并把它们作为单独的行插入same data.frame.输出应如下所示:

> df
  var1          var2
1    A          test
2    B             5
3    B             6
4    C             X
5    C             Y
6    D             M
7    D             N
8    D             O
Run Code Online (Sandbox Code Playgroud)

我使用strsplit和for循环来实现它.但是,我认为这个编码不是很好.任何想法如何以更好的R方式实现这一目标?

joh*_*nes 6

你可以这样做:

s <- strsplit(df[,2], " \\| | & ")
cbind(var1=rep(df[,1], sapply(s, length)), var2=unlist(s))
     var1 var2  
[1,] "A"  "test"
[2,] "B"  "5"  
[3,] "B"  "6"  
[4,] "C"  "X"  
[5,] "C"  "Y"  
[6,] "D"  "M"  
[7,] "D"  "N" 
[8,] "D"  "O"  
Run Code Online (Sandbox Code Playgroud)