[ad_1]
Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.
Bem-vindo à minha série de postagens de blog sobre meu pacote de manipulação de dados, {poorman}
. Para aqueles de vocês que não sabem, {poorman}
pretende ser uma replicação de {dplyr}
mas usando apenas {base}
R e, portanto, seja completamente livre de dependência. O que é legal nessa série é que, se você preferir apenas usar {dplyr}
, então está tudo bem! Destacando {poorman}
funcionalidade, essa série de postagens do blog destaca simultaneamente {dplyr}
funcionalidade também! Contudo, às vezes também descrevo como desenvolvi os internos de {poorman}
, destacando frequentemente útil {base}
R dicas e truques.
Hoje marca o lançamento da v0.2.1 de {poorman}
e com ele uma série de novas funções e recursos. No post de hoje, vamos dar uma olhada em alguns desses novos recursos. Dada a grande quantidade de recursos que este lançamento traz, não focaremos nos aspectos internos de nenhuma dessas funções; os internos serão salvos para outra postagem. Em vez disso, simplesmente daremos uma olhada no que alguns deles podem fazer.
A primeira função que veremos é distinct()
. Digamos que você queira selecionar apenas as linhas distintas ou únicas do seu data.frame
, distinct()
irá ajudá-lo a fazer isso. Vamos criar alguns dados falsos; alguns são duplicados.
df
Agora desejamos ver os registros distintos desses dados.
library(poorman, warn.conflicts = FALSE)
df %>% distinct()
# id age score
# 1 1 26 85
# 2 2 24 63
# 3 3 26 55
# 4 4 22 74
# 5 5 23 31
# 6 6 24 77
# 9 7 22 42
# 12 6 25 78
Portanto, vemos que agora temos apenas 8 registros dos 12 originais, porque as duplicatas foram removidas. Na verdade, podemos obter as linhas distintas para uma coluna específica, retornando apenas essa coluna.
df %>% distinct(age)
# age
# 1 26
# 2 24
# 4 22
# 5 23
# 12 25
Mas se você ainda precisa das outras variáveis, pode optar por mantê-las também.
df %>% distinct(age, .keep_all = TRUE)
# id age score
# 1 1 26 85
# 2 2 24 63
# 4 4 22 74
# 5 5 23 31
# 12 6 25 78
{dplyr}
fornece algumas maneiras de selecionar um subconjunto de linhas. Tem as funções top_n()
e top_frac()
assim como o slice_*()
família de funções. As funções anteriores foram agora substituídas por esta e, portanto, {poorman}
pulou a implementação do primeiro. Então, o que exatamente eles fazem? Vamos dar uma olhada em alguns exemplos usando o mtcars
conjunto de dados.
slice_head()
retorna o primeiro n
linhas (o padrão é 1). slice_tail()
retorna o último n
linhas (não mostradas aqui).
slice_head(mtcars, n = 3)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
slice_sample()
seleciona aleatoriamente linhas com ou sem substituição.
slice_sample(mtcars, n = 3, replace = TRUE)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
# Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
# Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
slice_min()
e slice_max()
selecione linhas com valores mais altos ou mais baixos de uma variável.
mtcars %>% slice_min(mpg, n = 3)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
# Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
# Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4
Agora é possível selecionar colunas no seu data.frame
que correspondem a um predicado como is.numeric()
. where()
pega uma função e retorna todas as variáveis para as quais a função retorna TRUE
.
df % select(where(is.numeric))
# col1
# 1 1
# 2 2
# 3 3
Contents
Localizando o primeiro elemento não ausente
Dado um conjunto de vetores, o coalesce()
A função localiza o primeiro valor não ausente em cada posição.
# Use a single value to replace all missing values
x
Converter valores em NA
Podemos converter valores em um vetor x
se eles corresponderem aos valores em um segundo vetor y
.
na_if(1:5, 5:1)
# [1] 1 2 NA 4 5
Isso é particularmente útil em um data.frame
se você precisar substituir um valor específico.
df % mutate(a = na_if(a, "BAD_VALUE"))
# a
# 1 a
# 2 b
# 3 c
# 4
Substituindo valores de NA
Dentro de um data.frame
geralmente temos valores ausentes em várias colunas. Às vezes, desejamos substituir esses valores, que é onde replace_na()
entra. replace_na()
é realmente uma função do {tidyr}
pacote, mas eu decidi adicioná-lo ao {poorman}
como é extremamente útil. Vamos dar uma olhada.
df % replace_na(list(x = 0, y = "unknown"))
# x y
# 1 1 a
# 2 2 unknown
# 3 0 b
Se desejarmos substituir valores dentro de um vetor ou coluna de um data.frame
, podemos usar recode()
. Esta é uma versão vetorizada do base::switch()
: você pode substituir valores numéricos com base em sua posição ou nome e valores de caracteres ou fatores apenas pelo nome.
char_vec
O grupo final (sem trocadilhos) de recursos é focado apenas em dados agrupados. Dada a quantidade, não vou entrar em detalhes e, em vez disso, forneço uma breve visão geral aqui para o leitor. O plano é detalhar essas funções em um blog separado, uma vez que muito trabalho foi realizado sob o capô que pode ser interessante discutir.
- Funções para dividir
data.frame
s:group_split()
,group_keys()
- Extrair metadados de agrupamento:
group_data()
,group_indices()
,group_vars()
,group_rows()
,group_size()
,n_groups()
,groups()
- Extraia informações sobre o atual grupo:
cur_data()
,cur_group()
,cur_group_id()
,cur_group_rows()
,cur_column()
Você chegou até aqui, ótimo! Não vou ficar com você por muito mais tempo. Este post demonstrou algumas das capacidades do {poorman}
(e, portanto, {dplyr}
) pacote. A versão v0.2.1, na verdade, inclui vários outros recursos e funções; portanto, verifique a página da versão para obter uma lista completa.
Como esta postagem no blog é bastante longa, eu não entrei em mais detalhes dos internos de {poorman}
No entanto, se você estiver interessado em examinar mais de perto como eu manejo os diferentes tipos de entrada, poderá ver o código na respectiva {poorman}
Página do GitHub. {poorman}
ainda está em andamento, mas como você pode ver, ele já possui muitas funcionalidades que você conhece e ama {dplyr}
portanto, se você estiver trabalhando em um novo projeto e não quiser lidar com o gerenciamento de dependências, especialmente se estiver compartilhando trabalho com colegas, por que não dar {poorman}
uma tentativa?
Se você deseja mostrar seu apoio a {poorman}
, considere atribuir ao pacote uma estrela no Github, pois ele fornece o aumento de dopamina necessário para continuar o desenvolvimento.
Relacionado
[ad_2]