使用 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
处理一个稍微混乱的数据,其中一个单元格中包含一系列值,如下所示:-
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