我有一列包含估計的轉化率數字,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