R中范围之间的中点

cha*_*423 0 r strsplit

我有一个列,其中包含转化率的估算数字;

Type  Conversion
A      90
B      84
C      85-90
D      60-70
Run Code Online (Sandbox Code Playgroud)

问题是,如果转换是在一个范围内给出的,我需要创建一个新的列,它取中间点.所以这样的事情;

Type   Conversion
A      90
B      84
C      87.5
D      65
Run Code Online (Sandbox Code Playgroud)

我怎么能在R中这样做?

Mic*_*ico 6

我会这样做如下:

library(data.table)
DF <- data.frame(Type = LETTERS[1:4],
                 Conversion = c(90, 84, "85-90", "60-70"),
                 stringsAsFactors = FALSE)

setDT(DF)[ , Conversion := sapply(strsplit(Conversion, split = "-"),
                                  function(x) mean(as.numeric(x)))]
> DF
   Type Conversion
1:    A         90
2:    B         84
3:    C       87.5
4:    D         65
Run Code Online (Sandbox Code Playgroud)

这依赖于了解数据的结构 - 例如,在Conversion任何地方都没有无关的连字符(如果数据太大而无法手动检查,请使用,例如DF[ , table(nchar(gsub("[^-]", "", Conversion)))]检查)

当然,基础也很简单R:

DF$Conversion <- sapply(strsplit(DF$Conversion, split = "-"),
                        function(x) mean(as.numeric(x)))
Run Code Online (Sandbox Code Playgroud)