使用R将一个单元格中的值分割为多个观察值

时间:2015-09-15 18:45:06

标签: r range data-cleaning

处理稍微混乱的数据,其中一个单元格包含一系列值,如下所示: -

Code           Flag
69660-69663      1
69666-69667      2

所需的输出是: -

Code   Flag
69660    1
69660    1
69660    1
69660    1
69666    2
69667    2

是否有一个可以处理值范围并将其拆分为不同观察值的包?

我尝试了这个解决方案: -

mydb2<-cSplit(mydb, "Code", sep = "-", direction = "long")

这只是将值分成两个不同的观察而不是观察范围。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用我的“splitstackshape”软件包中的cSplit,如下所示:

library(splitstackshape)
cSplit(mydf, "Code", "-")[, list(Code = Code_1:Code_2), by = Flag]
##    Flag Code
## 1:    1    1
## 2:    1    2
## 3:    1    3
## 4:    2    5
## 5:    2    6
## 6:    2    7
## 7:    2    8

答案 1 :(得分:0)

这是一种可能性 -

f <- function(x, y) {
    s <- strsplit(as.character(x), "-")[[1]]
    data.frame(Code = s[1]:s[2], Flag = y)
}

do.call(rbind, Map(f, df$Code, df$Flag))
#    Code Flag
# 1 69660    1
# 2 69661    1
# 3 69662    1
# 4 69663    1
# 5 69666    2
# 6 69667    2