我有一个列,其中包含转化率的估算数字;
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中这样做?
我会这样做如下:
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)