Estou tentando escrever uma função para remover um determinado nível em uma coluna em R
iris_df <- iris
iris_df$Species2 <- iris_df$Species
purrr::map(.x=c("Species","Species2"),variable="setosa", .f=function(x, variable){
levels(iris_df[,x])[levels(iris_df[,x]) == variable] <- NA
})
Posso executar isso, mas quando verifico os níveis, levels(iris_df$Species)
a resposta é que [1] "setosa" "versicolor" "virginica"
eu esperava que o setosa
nível tivesse sido removido. Alguém pode atualizar o código para corrigir isso?
O código executado em uma função é interno a essa função, o ambiente global não é alterado. Se você quiser escrever seu código assim, com “efeitos colaterais”, você precisa usar um
for
loop, não dentro de uma função.Se você quiser usar
purrr::map
, então você precisa que sua função retorne algo útil e você precisa atribuir o resultado com<-
ou=
. Embora seja provavelmente mais fácil de usardplyr::mutate
ao modificar colunas de um quadro de dados:Se você quiser criar uma função mais genérica de "eliminar nível(s) de coluna(s)", podemos agrupar qualquer uma dessas abordagens em uma função, mas você precisará passar o quadro de dados e atribuir o resultado ao mesmo quadro de dados ou um novo quadro de dados:
Retorne os valores das colunas em vez de
levels
.Você poderia apenas
replace
usarNA
e usardroplevels()
.onde