2017-11-02 9 views
2

몇 가지 범주 형 변수가 있는데 대상 기반 인코딩을 수행하려고합니다. 다음 내 코드대상 기반 인코딩을 수행하는 방법 R

str(df) 
var1 Factor w/8 levels "1", "2", "3"... 
var2 Factor w/5 levels "1", "3", "5"... etc 
target Factor w/2 levels "1", "0" 

내가 이벤트 속도의 확률로 이러한 요소의 수준을 변환하는 것을 시도하고있다 따라서

str(df) 
var1 Factor w/8 levels "0.0023", "0.08", "0.09"... etc 

같은 변수를 변환

levels(df$var1) <- table(df$var1, df$target)[,2]/ (table(df$var1, df$target)[,1] + table(df$var1, df$target)[,2]) 

이것들을 숫자로 변환하고 싶기 때문에 숫자 변환을했습니다.

df$var1 <- as.numeric(df$var1) 
는하지만 모든 값은 1, 2, 3 등으로 변경하고있어하지 내가 찾던 실제 확률 즉 0.0023, 0.08, 0.09 등

그렇게 할 수있는 방법이 있나요?

답변

1

이 작동합니다 :

df$var1 <- as.numeric(as.character(df$var1)) 

또는

df$var1 <- levels(df$Var1)[as.numeric(df$var1)] 
+0

그런 D' oh 순간이었습니다! 나는 휴식이 필요하다고 생각해. 고맙습니다. – hbabbar

+0

괜찮아요. – ags29

+0

as.numeric (레벨 (df $ Var1)) [df $ var1]'이 (가)'as.numeric (as.character (df $ var1))'보다 더 효율적이고 권장됩니다. 자세한 내용은'? factor' (경고 섹션) – ANG

1

df$var1 <- as.numeric(levels(df$var1))[df$var1]를 사용해보십시오. 여기에 설명이 있습니다

df1 <- data.frame(var1 = factor(c("0.0023", "0.08", "0.09"))) 
df2 <- data.frame(var1 = c("0.0023", "0.08", "0.09"), stringsAsFactors = FALSE) 
str(df1) 
str(df2) 
# does't work because var1 is factor not character 
as.numeric(df1$var1) 
# but it works for df2 
as.numeric(df2$var1) 
# solution to convert type of var1 in df1 
as.numeric(levels(df1$var1))[df1$var1]