Capítulo 13 Dataframes

# -----------------------------------------------------------------------------
# Data Frames
# -----------------------------------------------------------------------------
x = rnorm(10,
          10,
          2)

y = letters[1:10]

data.frame()
## data frame with 0 columns and 0 rows
dF = data.frame(x,
                 y)
dF
##            x y
## 1  10.685316 a
## 2  11.400806 b
## 3   7.181185 c
## 4  10.692711 d
## 5  13.834454 e
## 6  11.639422 f
## 7  10.600267 g
## 8  11.390469 h
## 9   8.123628 i
## 10 11.433486 j
# O comando str informa (retorna) a estrutura de um objeto e a parte dos dados
# que contém:
str(dF)
## 'data.frame':    10 obs. of  2 variables:
##  $ x: num  10.69 11.4 7.18 10.69 13.83 ...
##  $ y: chr  "a" "b" "c" "d" ...
# A instrução 'summary' sumariza um objeto (aqui, um frame, mas vai bem com
# quase todos objetos):
summary(dF)
##        x               y            
##  Min.   : 7.181   Length:10         
##  1st Qu.:10.622   Class :character  
##  Median :11.042   Mode  :character  
##  Mean   :10.698                     
##  3rd Qu.:11.425                     
##  Max.   :13.834
# Pode-se ter acesso aos dados das colunas de diversas maneiras:
dF$x 
##  [1] 10.685316 11.400806  7.181185 10.692711 13.834454
##  [6] 11.639422 10.600267 11.390469  8.123628 11.433486
h = dF$x
h
##  [1] 10.685316 11.400806  7.181185 10.692711 13.834454
##  [6] 11.639422 10.600267 11.390469  8.123628 11.433486
dF$y
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
dF[ ,1]
##  [1] 10.685316 11.400806  7.181185 10.692711 13.834454
##  [6] 11.639422 10.600267 11.390469  8.123628 11.433486
dF[['x']]
##  [1] 10.685316 11.400806  7.181185 10.692711 13.834454
##  [6] 11.639422 10.600267 11.390469  8.123628 11.433486
dF[['y']]
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
dim(dF)
## [1] 10  2
names(dF)
## [1] "x" "y"
row.names(dF)
##  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
# Pode-se mudar o nome das linhas ou das colunas:
names(dF) = c('ivan',
               'joao')
dF
##         ivan joao
## 1  10.685316    a
## 2  11.400806    b
## 3   7.181185    c
## 4  10.692711    d
## 5  13.834454    e
## 6  11.639422    f
## 7  10.600267    g
## 8  11.390469    h
## 9   8.123628    i
## 10 11.433486    j
row.names(dF) = letters[1:nrow(dF)]

row.names(dF) = c('Br','Fr','Ba','KK','LL','DR','QA','WW','FF', 'NN')

dF$z = seq(1, 10)

names(dF) = c('r',
               'tt',
               'zz')
dF
##            r tt zz
## Br 10.685316  a  1
## Fr 11.400806  b  2
## Ba  7.181185  c  3
## KK 10.692711  d  4
## LL 13.834454  e  5
## DR 11.639422  f  6
## QA 10.600267  g  7
## WW 11.390469  h  8
## FF  8.123628  i  9
## NN 11.433486  j 10
# Pode-se ter acesso direto as colunas de um frame usando o comando attach().
# Obs: Não deve esquecer-se de destacá-lo detach() quando terminar!
attach(dF)
mean(r)
## [1] 10.69817
mean(zz)
## [1] 5.5
detach(dF)

# Opção melhor
with(dF,
     mean(zz))
## [1] 5.5
with(dF,
     sort(x))
##  [1]  7.181185  8.123628 10.600267 10.685316 10.692711
##  [6] 11.390469 11.400806 11.433486 11.639422 13.834454
# -----------------------------------------------------------------------------
# Exercícios
# ----------------------------------------------------------------------------- 
# 1. Crie um dataframe expondo os nomes de 10 pacientes de uma academia, constando peso e altura de cada um, e obtendo também a média desses dois parâmetros
# 2. Uma socióloga deseja estudar o perfil dos alunos em um determinado curso da universidade. Monte um dataframe com os seguintes dados de cada pessoa: nome, raça, entrada ou não por ação afirmativa, renda mensal familiar. (Supor 15 alunos)
# 3. Um biólogo deseja avaliar um tipo de réptil. Monte um data frame que contenha a cor de cada réptil estudado(verde, marrom ou preto), o tamanho, e se é macho ou fêmea. Responda o tamanho médio, a quantidade de répteis por cores e a quantidade de machos e de fêmeas. (Suponha que 10 répteis estejam sendo estudados)