[英]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 list
( Enc$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.