我有一个列,其中包含转化率的估算数字;
Type Conversion
A 90
B 84
C 85-90
D 60-70
问题是,如果转换是在一个范围内给出的,我需要创建一个新的列来取中点。所以像这样;
Type Conversion
A 90
B 84
C 87.5
D 65
我怎样才能在R中这样做?
答案 0 :(得分: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
这依赖于了解数据的结构 - 例如,Conversion
任何地方都没有无关的连字符(如果数据太大而无法手动检查,请使用,例如DF[ , table(nchar(gsub("[^-]", "", Conversion)))]
检查)
当然,它在R
基础上也很简单:
DF$Conversion <- sapply(strsplit(DF$Conversion, split = "-"),
function(x) mean(as.numeric(x)))