小编典典

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

sql

在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

知道如何实现吗?

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

所以这:

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

谢谢。


阅读 171

收藏
2021-04-14

共1个答案

小编典典

一种选择是用于sub将“ min”和“ max”粘贴到-找到的“ D”列中,然后用于cSplit拆分“ 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
2021-04-14