27 de janeiro de 2016

Objetos básicos do R

O R contém 3 elementos básicos: character (texto), lógico e numérico.

"Este é um texto qualquer." # character
## [1] "Este é um texto qualquer."
TRUE # lógico
## [1] TRUE
10 # numérico
## [1] 10

A função 'str()' identifica os tipos básicos.

str("Este é um texto qualquer.")
##  chr "Este é um texto qualquer."
str(TRUE)
##  logi TRUE
str(10)
##  num 10

É possível combinar elementos básicos de um mesmo tipo em um vetor.

c(TRUE, TRUE, FALSE)
## [1]  TRUE  TRUE FALSE
c(1,2,3)
## [1] 1 2 3
c("Texto 1", "Texto 2")
## [1] "Texto 1" "Texto 2"

O que acontece se combinarmos elementos de tipos diferentes no mesmo vetor?

c(1, TRUE, "Texto")
## [1] "1"     "TRUE"  "Texto"
str(c(1, TRUE, "Texto"))
##  chr [1:3] "1" "TRUE" "Texto"

Sugestão de leitura: R Data Structures

A função "<-" armazena um objeto em uma variável que pode ser acessada depois

numeros <- c(1, 2, 3)
numeros
## [1] 1 2 3
numeros - 1
## [1] 0 1 2

Qual o resultado de cada expressão a seguir?

5 * c(1, 2, 3)
## [1]  5 10 15
c(5,5,5) * c(1, 2, 3)
## [1]  5 10 15
c(1,2,3) * c(1, 2, 3)
## [1] 1 4 9

data.frame e data.table

No R básico, uma base de dados é um objeto do tipo data.frame.

DF <- data.frame(ANO = c(2015, 2015, 2016, 2016),
                 FONTE = c(10, 60, 10, 60),
                 VALOR = c(10, 20, 50, 50))
DF
##    ANO FONTE VALOR
## 1 2015    10    10
## 2 2015    60    20
## 3 2016    10    50
## 4 2016    60    50

A função '[,]' do data.frame seleciona linhas e/ou colunas da base de dados

DF[linhas, colunas]

A seleção na linha pode ser realizada com vetores lógicos ou numéricos.

# seleciona as duas primeiras linhas (e todas as colunas)
DF[c(TRUE, TRUE, FALSE, FALSE), ] 
##    ANO FONTE VALOR
## 1 2015    10    10
## 2 2015    60    20
DF[c(1, 2), ] # seleciona as duas primeiras linhas (e todas as colunas)
##    ANO FONTE VALOR
## 1 2015    10    10
## 2 2015    60    20

É possível utilizar resultados de testes (vetores lógicos) para filtrar linhas

DF$ANO == 2015
## [1]  TRUE  TRUE FALSE FALSE
DF[DF$ANO == 2015, ] # O operador '$' seleciona uma coluna da base de dados.
##    ANO FONTE VALOR
## 1 2015    10    10
## 2 2015    60    20

O segundo argumento da função '[ ]' seleciona colunas

DF[linhas, colunas]

A seleção na coluna pode ser realizada com lógicos, nomes ou números

DF[, "ANO"] # seleciona a coluna ANO (e todas as linhas)
## [1] 2015 2015 2016 2016
DF[, 1] # seleciona a primeira coluna (e todas as linhas)
## [1] 2015 2015 2016 2016
DF[, c(TRUE, FALSE)] # seleciona a primeira coluna (e todas as linhas)
##    ANO VALOR
## 1 2015    10
## 2 2015    20
## 3 2016    50
## 4 2016    50

Também é possível utilizar o resultado de testes para selecionar colunas

names(DF)
## [1] "ANO"   "FONTE" "VALOR"
names(DF) == "ANO"
## [1]  TRUE FALSE FALSE
names(DF) %in% c("ANO", "VALOR")
## [1]  TRUE FALSE  TRUE

Utilizando um teste para selecionar colunas

DF[, names(DF) %in% c("ANO", "VALOR")]
##    ANO VALOR
## 1 2015    10
## 2 2015    20
## 3 2016    50
## 4 2016    50

O pacote data.table extende os usos da função '[ ]'.

Além de selecionar linhas e colunas, com o pacote data.table também é possível realizar operações sobre as colunas e fazer agregações.

library(data.table)
DT <- data.table(DF)
DT
##     ANO FONTE VALOR
## 1: 2015    10    10
## 2: 2015    60    20
## 3: 2016    10    50
## 4: 2016    60    50

Sintaxe da função '[ ]' com o data.table

DT[linhas, colunas/operações, quebras/agregações]

Operações básicas com o data.table

DT[ANO==2015, sum(VALOR)] # Soma a coluna VALOR onde ANO == 2015
## [1] 30
DT[, sum(VALOR), ANO] # Soma a coluna VALOR por ANO (todas as linhas)
##     ANO  V1
## 1: 2015  30
## 2: 2016 100
DT[, list(SOMA_VALOR = sum(VALOR)), ANO] # Define nome
##     ANO SOMA_VALOR
## 1: 2015         30
## 2: 2016        100

Insere uma coluna MEDIA_VALOR na base, com a média do valor por ANO

DT
##     ANO FONTE VALOR
## 1: 2015    10    10
## 2: 2015    60    20
## 3: 2016    10    50
## 4: 2016    60    50
DT[, MEDIA_VALOR := mean(VALOR), ANO]; DT
##     ANO FONTE VALOR MEDIA_VALOR
## 1: 2015    10    10          15
## 2: 2015    60    20          15
## 3: 2016    10    50          50
## 4: 2016    60    50          50