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
谢谢.
一种选择是用于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)