我有一列包含估计的转化率数字,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中做到这一点?
我有一列包含估计的转化率数字,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)))]
检查)
当然,这只是在基地R
一样容易:
DF$Conversion <- sapply(strsplit(DF$Conversion, split = "-"),
function(x) mean(as.numeric(x)))
由迈克尔·古德答案。这里是我想出的:
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