R 范围之间的中点

Midpoint between range in R

我有一列估算转化率的数字,如下所示;

Type  Conversion
A      90
B      84
C      85-90
D      60-70

问题是,如果转换是在一个范围内给出的,我需要创建一个采用中点的新列。所以像这样;

Type   Conversion
A      90
B      84
C      87.5
D      65

我如何在 R 中执行此操作?

我会这样做:

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

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

当然,在 base R:

中同样简单
DF$Conversion <- sapply(strsplit(DF$Conversion, split = "-"),
                        function(x) mean(as.numeric(x)))

Michael 的回答很好。这是我想出的:

library(magrittr)
x <- data.frame("Type"=LETTERS[1:4], "Conversion"=c('90', '84', '85-90', '60-70'))
x$Conversion <- strsplit(x$Conversion, "-") %>% lapply(., function(x){
    unlist(x) %>% as.numeric %>% mean
    }) %>% unlist