从data.frame中拆分值并创建其他行来存储其组件

pse*_*dom 1 sql r dataframe dplyr

在R中,我有一个名为df的数据框,如下所示:

A      B      C      D
a1 b1 c1 2.5
a2 b2 c2 3.5
a3 b3 c3 5 - 7
a4 b4 c4 2.5


我想用破折号分割第三行和D列的值,并为第二个值创建另一行,保留该行的其他值.

所以我想要这个:

A      B      C      D
a1 b1 c1 2.5
a2 b2 c2 3.5
a3 b3 c3 5
a3 b3 c3 7
a4 b4 c4 2.5

知道如何实现这一目标吗?

理想情况下,我还想创建一个额外的列来指定I split的值是最小值还是最大值.

所以这:

A      B      C      D      E
a1 b1 c1 2.5
a2 b2 c2 3.5
a3 b3 c3 5 min
a3 b3 c3 7 max
a4 b4 c4 2.5

谢谢.

akr*_*run 6

一种选择是用于sub-找到cSplit的'D'列中粘贴'min'和'max ,然后用于拆分'D'列.

library(splitstackshape)
df1$D <- sub('(\\d+) - (\\d+)', '\\1,min - \\2,max', df1$D)
res <- cSplit(cSplit(df1, 'D', ' - ', 'long'), 'D', ',')[is.na(D_2), D_2 := '']
setnames(res, 4:5, LETTERS[4:5])
res
#   A  B  C   D   E
#1: a1 b1 c1 2.5    
#2: a2 b2 c2 3.5    
#3: a3 b3 c3 5.0 min
#4: a3 b3 c3 7.0 max
#5: a4 b4 c4 2.5    
Run Code Online (Sandbox Code Playgroud)