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