簡體   English   中英

magrittr 管道中的 WOE

[英]WOE in a magrittr Pipe

如何將下面的證據代碼權重放入 magrittr 管道( df %>% )? 我試過的任何東西似乎都不起作用。

df:

library(Information)
library(magrittr)


#df
a = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb") 
b = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb") 
c = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb") 
d = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb") 
e = c(1, 0, 1, 0, 0, 0, 1, 1, 1, 1)
df = data.frame(a,b,c,d,e)

cols <- c("c","d")

管道代碼

Enc <- create_infotables(data=subset(df, select = -c(a)), y="e", parallel=FALSE)

for(i in names(df[,cols])) {
  df[,i] <- Enc$Tables[[i]][match(df[,i], Enc$Tables[[i]][,1]), 4]
}

我們可以使用map2 在這里,我們正在檢查兩個對象的相應元素,即帶有來自 data.frame listEnc$Tables )的列的列。 所以,一個選項是map2

library(purrr)
df[cols] <- map2_dfc(df[cols], Enc$Tables[cols], ~  .y[match(.x, .y[,1]), 4])

在管道中使用它

library(magrittr)
library(dplyr)
df %>%
    select(-a) %>%
    create_infotables(data = ., y = "e", parallel = FALSE) %>%       
    pluck("Tables") %>%
    magrittr::extract(cols) %>%
    map2_dfc(df[cols], ., ~ .y[match(.x, .y[,1]), 4]) 

如果您確實想使用 magritte 管道,您也可以嘗試這樣做:定義一個函數,該函數將列名作為輸入,並使用mutate()和 cross across()將其應用於向量cols所有列名。

library(dplyr)

enc <- function(col_name) {
  Enc$Tables[[col_name]][match(df[,col_name], Enc$Tables[[col_name]][,1]), 4]
}

df %>% 
  mutate(across(cols, function(x) enc(cur_column())))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM