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

Splitting range of values in one cell to multiple observations using R

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

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")

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

您可以尝试使用我的 "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

有一种可能-

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