Stack Overflow em Português Asked by Alexandre Sanches on December 2, 2021
Tenho um DF
que possui alguns NA
, como vou utilizá-lo para montar uma tabela, necessitava de trocar os NA
por " ", para só aparecer o espaço vazio na tabela. Estou utilizando um mutate_if
para deixar os números com apenas duas casas decimais e trocar de .
para ,
.
Tentei utilizar o seguinte código, com mutate
e replace_na
, mas não deu certo, os NA
continuam aparecendo.
library(tidyverse)
df %>%
mutate_if(is.numeric, format, scientific = FALSE, big.mark = ".", decimal.mark = ",", digits = 2) %>%
mutate_all(~ replace_na(., NA))
Meu dput
:
df <- structure(list(a = c("Brasil", "Alimentação no domicílio",
"Arroz", "Feijão-carioca (rajado)", "Farinha de trigo"),
b = c(NA, 0.02, 2.71, 9.82, 3.35), c = c(NA, 0.38, 3.69, 10.96, 3.62),
d = c(NA, 0.87, 4.13, 7.28, 3.14), e = c(NA, 1.11, 4.02, 10.09, 3.24),
f = c(NA, 1.13, 4.27, 9.23, 3.43), g = c(NA, NA, 0.15367429760666, 0.0882935186561618, 0.0116253902185224)),
row.names = c(NA, 5L), class = "data.frame")
Você pode usar os [ ], que são uma ferramenta de indexação poderosíssima e subestimada, assim:
df[is.na(df)] <- ''
Answered by yoyo on December 2, 2021
A seguinte solução consegue fazer o que a pergunta pede.
library(tidyverse)
fun <- function(x) {sub("(^.*\d,\d\d)(.*$)", "\1", sub("\.", ",", x))}
df %>%
mutate(across(everything(), ~replace_na(.x, " "))) %>%
mutate_at(vars(b:g), fun)
# a b c d e f g
#1 Brasil
#2 Alimentação no domicílio 0,02 0,38 0,87 1,11 1,13
#3 Arroz 2,71 3,69 4,13 4,02 4,27 0,15
#4 Feijão-carioca (rajado) 9,82 10,96 7,28 10,09 9,23 0,08
#5 Farinha de trigo 3,35 3,62 3,14 3,24 3,43 0,01
Answered by Rui Barradas on December 2, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP