Curso de estatística experimental com aplicações em R

12 à 14 de Novembro de 2014 - Manaus - AM
Prof. Dr. Walmes M. Zeviani
Embrapa Amazônia Ocidental
Lab. de Estatística e Geoinformação - LEG
Departamento de Estatística - UFPR

Leitura e edição de dados

Arquivos texto com caracter separador

##-----------------------------------------------------------------------------
## Dados com separador de campo que é tabulação.

## Os dados aqui considerados então disponíveis no diretório web no
## seguinte endereço. Vá até lá e baixe os dados.
## http://www.leg.ufpr.br/~walmes/data/

## É possível fazer o download com o próprio R.
url <- "http://www.leg.ufpr.br/~walmes/data/brasilCopa2014.txt"
download.file(url=url, destfile=basename(url))
list.files(pattern="*.txt")
## [1] "brasilCopa2014.txt" "header.txt"
da <- read.table("brasilCopa2014.txt", header=TRUE, sep="\t")
str(da)
## 'data.frame':    21 obs. of  16 variables:
##  $ R   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Name: Factor w/ 21 levels "Bernard","Dani Alves",..: 16 2 17 4 12 20 14 6 9 18 ...
##  $ Pos : Factor w/ 15 levels "AM(CLR)","AM(LR),FW",..: 1 6 1 4 5 3 8 11 2 14 ...
##  $ Age : int  22 31 23 27 27 30 26 31 28 26 ...
##  $ cm  : int  175 173 179 189 187 183 174 185 180 181 ...
##  $ kg  : int  64 64 67 86 80 79 75 75 85 77 ...
##  $ Apps: Factor w/ 13 levels "0(1)","0(3)",..: 10 9 13 13 12 12 12 12 11 11 ...
##  $ Goal: Factor w/ 4 levels "-","1","2","4": 4 1 3 3 1 2 1 2 1 1 ...
##  $ A   : Factor w/ 3 levels "-","1","2": 2 1 3 2 2 1 3 1 1 1 ...
##  $ Yel : Factor w/ 4 levels "-","1","2","3": 2 2 2 1 3 4 1 1 2 1 ...
##  $ Red : Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
##  $ SpG : Factor w/ 12 levels "-","0,3","0,5",..: 12 9 10 9 3 2 9 10 11 8 ...
##  $ PS. : Factor w/ 21 levels "100","66,9","67",..: 8 12 6 10 19 16 11 3 5 13 ...
##  $ AW  : Factor w/ 12 levels "-","0,3","0,6",..: 5 7 6 10 12 11 2 9 8 4 ...
##  $ MoM : Factor w/ 3 levels "-","1","2": 3 1 2 1 2 2 1 1 1 1 ...
##  $ Rt  : Factor w/ 21 levels "5,17","6,05",..: 21 20 19 18 17 16 15 14 13 12 ...
da <- read.table("brasilCopa2014.txt", header=TRUE, sep="\t",
                 stringsAsFactors=FALSE, na.string="-")
str(da)
## 'data.frame':    21 obs. of  16 variables:
##  $ R   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Name: chr  "Neymar" "Dani Alves" "Oscar" "David Luiz" ...
##  $ Pos : chr  "AM(CLR)" "D(CR)" "AM(CLR)" "D(C),DM(C)" ...
##  $ Age : int  22 31 23 27 27 30 26 31 28 26 ...
##  $ cm  : int  175 173 179 189 187 183 174 185 180 181 ...
##  $ kg  : int  64 64 67 86 80 79 75 75 85 77 ...
##  $ Apps: chr  "5" "4" "7" "7" ...
##  $ Goal: int  4 NA 2 2 NA 1 NA 1 NA NA ...
##  $ A   : int  1 NA 2 1 1 NA 2 NA NA NA ...
##  $ Yel : int  1 1 1 NA 2 3 NA NA 1 NA ...
##  $ Red : logi  NA NA NA NA NA NA ...
##  $ SpG : chr  "3,6" "1,3" "2" "1,3" ...
##  $ PS. : chr  "79" "84" "78,6" "81" ...
##  $ AW  : chr  "0,8" "1" "0,9" "2,3" ...
##  $ MoM : int  2 NA 1 NA 1 1 NA NA NA NA ...
##  $ Rt  : chr  "8,22" "7,53" "7,39" "7,35" ...
##-----------------------------------------------------------------------------
## Dados com separador de campo que é ponto e vírgula. Aqui os dados
## serão importados diretamente do link web sem precisar fazer download.

da <-
    read.table("http://www.leg.ufpr.br/~walmes/data/brasilCopa2014.csv",
               header=TRUE, sep=";", stringsAsFactors=FALSE, na.string="-")
str(da)
## 'data.frame':    21 obs. of  16 variables:
##  $ R   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Name: chr  "Neymar" "Dani Alves" "Oscar" "David Luiz" ...
##  $ Pos : chr  "AM(CLR)" "D(CR)" "AM(CLR)" "D(C),DM(C)" ...
##  $ Age : int  22 31 23 27 27 30 26 31 28 26 ...
##  $ cm  : int  175 173 179 189 187 183 174 185 180 181 ...
##  $ kg  : int  64 64 67 86 80 79 75 75 85 77 ...
##  $ Apps: chr  "5" "4" "7" "7" ...
##  $ Goal: int  4 NA 2 2 NA 1 NA 1 NA NA ...
##  $ A   : int  1 NA 2 1 1 NA 2 NA NA NA ...
##  $ Yel : int  1 1 1 NA 2 3 NA NA 1 NA ...
##  $ Red : logi  NA NA NA NA NA NA ...
##  $ SpG : num  3.6 1.3 2 1.3 0.5 0.3 1.3 2 2.3 1.2 ...
##  $ PS. : num  79 84 78.6 81 91.1 87.4 83 67 71.1 84.5 ...
##  $ AW  : num  0.8 1 0.9 2.3 3 2.5 0.3 1.3 1.2 0.7 ...
##  $ MoM : int  2 NA 1 NA 1 1 NA NA NA NA ...
##  $ Rt  : num  8.22 7.53 7.39 7.35 7.27 7.16 7.08 6.66 6.57 6.51 ...

Arquivos texto com comprimento fixo de campo

##-----------------------------------------------------------------------------
## Dados com comprimento fixo de campo.

l <- c(0,3,16,28,31,35,38,43,45,47,49,50,54,60,64,66,70)
diff(l)
##  [1]  3 13 12  3  4  3  5  2  2  2  1  4  6  4  2  4
db <-
    read.fwf("http://www.leg.ufpr.br/~walmes/data/brasilCopa2014fwf.txt",
             header=TRUE, sep="\t",
             widths=diff(l), stringsAsFactors=FALSE)
str(db)
## 'data.frame':    21 obs. of  16 variables:
##  $ R   : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Name: chr  "Neymar       " "Dani Alves   " "Oscar        " "David Luiz   " ...
##  $ Pos : chr  "AM(CLR)     " "D(CR)       " "AM(CLR)     " "D(C),DM(C)  " ...
##  $ Age : num  22 31 23 27 27 30 26 31 28 26 ...
##  $ cm  : num  175 173 179 189 187 183 174 185 180 181 ...
##  $ kg  : num  64 64 67 86 80 79 75 75 85 77 ...
##  $ Apps: chr  "5    " "4    " "7    " "7    " ...
##  $ Goal: num  4 NA 2 2 NA 1 NA 1 NA NA ...
##  $ A   : num  1 NA 2 1 1 NA 2 NA NA NA ...
##  $ Yel : num  1 1 1 NA 2 3 NA NA 1 NA ...
##  $ Red : logi  NA NA NA NA NA NA ...
##  $ SpG : num  3.6 1.3 2 1.3 0.5 0.3 1.3 2 2.3 1.2 ...
##  $ PS. : num  79 84 78.6 81 91.1 87.4 83 67 71.1 84.5 ...
##  $ AW  : num  0.8 1 0.9 2.3 3 2.5 0.3 1.3 1.2 0.7 ...
##  $ MoM : num  2 NA 1 NA 1 1 NA NA NA NA ...
##  $ Rt  : num  8.22 7.53 7.39 7.35 7.27 7.16 7.08 6.66 6.57 6.51 ...
gsub(x=db$Name, pattern="\\s*$", replacement="")
##  [1] "Neymar"       "Dani Alves"   "Oscar"        "David Luiz"   "Luiz Gustavo"
##  [6] "Thiago Silva" "Marcelo"      "Fred"         "Hulk"         "Paulinho"    
## [11] "Fernandinho"  "Maicon"       "Hernanes"     "Ramires"      "Willian"     
## [16] "Henrique"     "Bernard"      "Julio César"  "Jô"           "Maxwell"     
## [21] "Dante"
names(db) <- tolower(names(db))
str(db)
## 'data.frame':    21 obs. of  16 variables:
##  $ r   : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ name: chr  "Neymar       " "Dani Alves   " "Oscar        " "David Luiz   " ...
##  $ pos : chr  "AM(CLR)     " "D(CR)       " "AM(CLR)     " "D(C),DM(C)  " ...
##  $ age : num  22 31 23 27 27 30 26 31 28 26 ...
##  $ cm  : num  175 173 179 189 187 183 174 185 180 181 ...
##  $ kg  : num  64 64 67 86 80 79 75 75 85 77 ...
##  $ apps: chr  "5    " "4    " "7    " "7    " ...
##  $ goal: num  4 NA 2 2 NA 1 NA 1 NA NA ...
##  $ a   : num  1 NA 2 1 1 NA 2 NA NA NA ...
##  $ yel : num  1 1 1 NA 2 3 NA NA 1 NA ...
##  $ red : logi  NA NA NA NA NA NA ...
##  $ spg : num  3.6 1.3 2 1.3 0.5 0.3 1.3 2 2.3 1.2 ...
##  $ ps. : num  79 84 78.6 81 91.1 87.4 83 67 71.1 84.5 ...
##  $ aw  : num  0.8 1 0.9 2.3 3 2.5 0.3 1.3 1.2 0.7 ...
##  $ mom : num  2 NA 1 NA 1 1 NA NA NA NA ...
##  $ rt  : num  8.22 7.53 7.39 7.35 7.27 7.16 7.08 6.66 6.57 6.51 ...

Edição de tabelas

##-----------------------------------------------------------------------------
## Ler dados de um experimento em blocos com variedades de batatinha. Os
## dados estão no formato amplo.

bat <- read.table("http://www.leg.ufpr.br/~walmes/data/pimentel_batatinha_wide.txt",
                  header=TRUE, sep="\t")
str(bat)
## 'data.frame':    8 obs. of  5 variables:
##  $ variedade: Factor w/ 8 levels "B 116-51","B 1-52",..: 7 6 8 5 3 2 1 4
##  $ I        : num  9.2 21.1 22.6 15.4 12.7 20 23.1 18
##  $ II       : num  13.4 27 29.9 11.9 18 21.1 24.2 24.6
##  $ III      : num  11 26.4 24.2 10.1 18.2 20 26.4 24
##  $ IV       : num  9.2 25.7 25.1 12.3 17.1 28 16.3 24.6
bat
##     variedade    I   II  III   IV
## 1    Kennebec  9.2 13.4 11.0  9.2
## 2     Huinkul 21.1 27.0 26.4 25.7
## 3 S. Rafalela 22.6 29.9 24.2 25.1
## 4 Buena Vista 15.4 11.9 10.1 12.3
## 5   B 25-50 E 12.7 18.0 18.2 17.1
## 6      B 1-52 20.0 21.1 20.0 28.0
## 7    B 116-51 23.1 24.2 26.4 16.3
## 8   B 72-53 A 18.0 24.6 24.0 24.6
require(reshape)
## Loading required package: reshape
## Empilhando os valores, de amplo para longo.
batl <- melt(bat, id.vars="variedade", variable_name="bloco")
str(batl)
## 'data.frame':    32 obs. of  3 variables:
##  $ variedade: Factor w/ 8 levels "B 116-51","B 1-52",..: 7 6 8 5 3 2 1 4 7 6 ...
##  $ bloco    : Factor w/ 4 levels "I","II","III",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ value    : num  9.2 21.1 22.6 15.4 12.7 20 23.1 18 13.4 27 ...
## De longo para amplo (caminho inverso).
cast(batl, variedade~bloco, value="value")
##     variedade    I   II  III   IV
## 1    B 116-51 23.1 24.2 26.4 16.3
## 2      B 1-52 20.0 21.1 20.0 28.0
## 3   B 25-50 E 12.7 18.0 18.2 17.1
## 4   B 72-53 A 18.0 24.6 24.0 24.6
## 5 Buena Vista 15.4 11.9 10.1 12.3
## 6     Huinkul 21.1 27.0 26.4 25.7
## 7    Kennebec  9.2 13.4 11.0  9.2
## 8 S. Rafalela 22.6 29.9 24.2 25.1
##-----------------------------------------------------------------------------
## Ordenar a tabela.

require(plyr)
## Loading required package: plyr
## 
## Attaching package: 'plyr'
## 
## The following objects are masked from 'package:reshape':
## 
##     rename, round_any
arrange(batl, variedade, bloco)
##      variedade bloco value
## 1     B 116-51     I  23.1
## 2     B 116-51    II  24.2
## 3     B 116-51   III  26.4
## 4     B 116-51    IV  16.3
## 5       B 1-52     I  20.0
## 6       B 1-52    II  21.1
## 7       B 1-52   III  20.0
## 8       B 1-52    IV  28.0
## 9    B 25-50 E     I  12.7
## 10   B 25-50 E    II  18.0
## 11   B 25-50 E   III  18.2
## 12   B 25-50 E    IV  17.1
## 13   B 72-53 A     I  18.0
## 14   B 72-53 A    II  24.6
## 15   B 72-53 A   III  24.0
## 16   B 72-53 A    IV  24.6
## 17 Buena Vista     I  15.4
## 18 Buena Vista    II  11.9
## 19 Buena Vista   III  10.1
## 20 Buena Vista    IV  12.3
## 21     Huinkul     I  21.1
## 22     Huinkul    II  27.0
## 23     Huinkul   III  26.4
## 24     Huinkul    IV  25.7
## 25    Kennebec     I   9.2
## 26    Kennebec    II  13.4
## 27    Kennebec   III  11.0
## 28    Kennebec    IV   9.2
## 29 S. Rafalela     I  22.6
## 30 S. Rafalela    II  29.9
## 31 S. Rafalela   III  24.2
## 32 S. Rafalela    IV  25.1
arrange(batl, value)
##      variedade bloco value
## 1     Kennebec     I   9.2
## 2     Kennebec    IV   9.2
## 3  Buena Vista   III  10.1
## 4     Kennebec   III  11.0
## 5  Buena Vista    II  11.9
## 6  Buena Vista    IV  12.3
## 7    B 25-50 E     I  12.7
## 8     Kennebec    II  13.4
## 9  Buena Vista     I  15.4
## 10    B 116-51    IV  16.3
## 11   B 25-50 E    IV  17.1
## 12   B 72-53 A     I  18.0
## 13   B 25-50 E    II  18.0
## 14   B 25-50 E   III  18.2
## 15      B 1-52     I  20.0
## 16      B 1-52   III  20.0
## 17     Huinkul     I  21.1
## 18      B 1-52    II  21.1
## 19 S. Rafalela     I  22.6
## 20    B 116-51     I  23.1
## 21   B 72-53 A   III  24.0
## 22    B 116-51    II  24.2
## 23 S. Rafalela   III  24.2
## 24   B 72-53 A    II  24.6
## 25   B 72-53 A    IV  24.6
## 26 S. Rafalela    IV  25.1
## 27     Huinkul    IV  25.7
## 28     Huinkul   III  26.4
## 29    B 116-51   III  26.4
## 30     Huinkul    II  27.0
## 31      B 1-52    IV  28.0
## 32 S. Rafalela    II  29.9
arrange(batl, variedade, value)
##      variedade bloco value
## 1     B 116-51    IV  16.3
## 2     B 116-51     I  23.1
## 3     B 116-51    II  24.2
## 4     B 116-51   III  26.4
## 5       B 1-52     I  20.0
## 6       B 1-52   III  20.0
## 7       B 1-52    II  21.1
## 8       B 1-52    IV  28.0
## 9    B 25-50 E     I  12.7
## 10   B 25-50 E    IV  17.1
## 11   B 25-50 E    II  18.0
## 12   B 25-50 E   III  18.2
## 13   B 72-53 A     I  18.0
## 14   B 72-53 A   III  24.0
## 15   B 72-53 A    II  24.6
## 16   B 72-53 A    IV  24.6
## 17 Buena Vista   III  10.1
## 18 Buena Vista    II  11.9
## 19 Buena Vista    IV  12.3
## 20 Buena Vista     I  15.4
## 21     Huinkul     I  21.1
## 22     Huinkul    IV  25.7
## 23     Huinkul   III  26.4
## 24     Huinkul    II  27.0
## 25    Kennebec     I   9.2
## 26    Kennebec    IV   9.2
## 27    Kennebec   III  11.0
## 28    Kennebec    II  13.4
## 29 S. Rafalela     I  22.6
## 30 S. Rafalela   III  24.2
## 31 S. Rafalela    IV  25.1
## 32 S. Rafalela    II  29.9
##-----------------------------------------------------------------------------
## Filtrar a tabela (tomar subconjuntos).

subset(batl, variedade=="Kennebec")
##    variedade bloco value
## 1   Kennebec     I   9.2
## 9   Kennebec    II  13.4
## 17  Kennebec   III  11.0
## 25  Kennebec    IV   9.2
subset(batl, variedade%in%c("Kennebec","Buena Vista"))
##      variedade bloco value
## 1     Kennebec     I   9.2
## 4  Buena Vista     I  15.4
## 9     Kennebec    II  13.4
## 12 Buena Vista    II  11.9
## 17    Kennebec   III  11.0
## 20 Buena Vista   III  10.1
## 25    Kennebec    IV   9.2
## 28 Buena Vista    IV  12.3
subset(batl, is.element(variedade, c("Kennebec","Buena Vista")))
##      variedade bloco value
## 1     Kennebec     I   9.2
## 4  Buena Vista     I  15.4
## 9     Kennebec    II  13.4
## 12 Buena Vista    II  11.9
## 17    Kennebec   III  11.0
## 20 Buena Vista   III  10.1
## 25    Kennebec    IV   9.2
## 28 Buena Vista    IV  12.3
subset(batl, bloco=="I")
##     variedade bloco value
## 1    Kennebec     I   9.2
## 2     Huinkul     I  21.1
## 3 S. Rafalela     I  22.6
## 4 Buena Vista     I  15.4
## 5   B 25-50 E     I  12.7
## 6      B 1-52     I  20.0
## 7    B 116-51     I  23.1
## 8   B 72-53 A     I  18.0
subset(batl, bloco%in%c("I","IV") & variedade=="Kennebec")
##    variedade bloco value
## 1   Kennebec     I   9.2
## 25  Kennebec    IV   9.2
subset(batl, bloco%in%c("I","IV") | variedade=="Kennebec")
##      variedade bloco value
## 1     Kennebec     I   9.2
## 2      Huinkul     I  21.1
## 3  S. Rafalela     I  22.6
## 4  Buena Vista     I  15.4
## 5    B 25-50 E     I  12.7
## 6       B 1-52     I  20.0
## 7     B 116-51     I  23.1
## 8    B 72-53 A     I  18.0
## 9     Kennebec    II  13.4
## 17    Kennebec   III  11.0
## 25    Kennebec    IV   9.2
## 26     Huinkul    IV  25.7
## 27 S. Rafalela    IV  25.1
## 28 Buena Vista    IV  12.3
## 29   B 25-50 E    IV  17.1
## 30      B 1-52    IV  28.0
## 31    B 116-51    IV  16.3
## 32   B 72-53 A    IV  24.6
subset(batl, value>25)
##      variedade bloco value
## 10     Huinkul    II  27.0
## 11 S. Rafalela    II  29.9
## 18     Huinkul   III  26.4
## 23    B 116-51   III  26.4
## 26     Huinkul    IV  25.7
## 27 S. Rafalela    IV  25.1
## 30      B 1-52    IV  28.0
subset(batl, value<12)
##      variedade bloco value
## 1     Kennebec     I   9.2
## 12 Buena Vista    II  11.9
## 17    Kennebec   III  11.0
## 20 Buena Vista   III  10.1
## 25    Kennebec    IV   9.2
##-----------------------------------------------------------------------------
## Classificar valoes.

range(batl$value)
## [1]  9.2 29.9
cls <- c(-Inf,15,25,Inf)
findInterval(batl$value, vec=cls)
##  [1] 1 2 2 2 1 2 2 2 1 3 3 1 2 2 2 2 1 3 2 1 2 2 3 2 1 3 3 1 2 3 2 2
cut(batl$value, breaks=cls)
##  [1] (-Inf,15] (15,25]   (15,25]   (15,25]   (-Inf,15] (15,25]   (15,25]   (15,25]  
##  [9] (-Inf,15] (25, Inf] (25, Inf] (-Inf,15] (15,25]   (15,25]   (15,25]   (15,25]  
## [17] (-Inf,15] (25, Inf] (15,25]   (-Inf,15] (15,25]   (15,25]   (25, Inf] (15,25]  
## [25] (-Inf,15] (25, Inf] (25, Inf] (-Inf,15] (15,25]   (25, Inf] (15,25]   (15,25]  
## Levels: (-Inf,15] (15,25] (25, Inf]
cut(batl$value, breaks=cls, labels=c("baixa","media","alta"))
##  [1] baixa media media media baixa media media media baixa alta  alta  baixa media media
## [15] media media baixa alta  media baixa media media alta  media baixa alta  alta  baixa
## [29] media alta  media media
## Levels: baixa media alta
##-----------------------------------------------------------------------------
## Adicionar uma coluna à tabela de dados.

## Classe de produtividade.
batl$pcls <- cut(batl$value, breaks=cls,
                 labels=c("baixa","media","alta"))
str(batl)
## 'data.frame':    32 obs. of  4 variables:
##  $ variedade: Factor w/ 8 levels "B 116-51","B 1-52",..: 7 6 8 5 3 2 1 4 7 6 ...
##  $ bloco    : Factor w/ 4 levels "I","II","III",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ value    : num  9.2 21.1 22.6 15.4 12.7 20 23.1 18 13.4 27 ...
##  $ pcls     : Factor w/ 3 levels "baixa","media",..: 1 2 2 2 1 2 2 2 1 3 ...
batl <- transform(batl, lprod=log10(value), prods=value^2)
str(batl)
## 'data.frame':    32 obs. of  6 variables:
##  $ variedade: Factor w/ 8 levels "B 116-51","B 1-52",..: 7 6 8 5 3 2 1 4 7 6 ...
##  $ bloco    : Factor w/ 4 levels "I","II","III",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ value    : num  9.2 21.1 22.6 15.4 12.7 20 23.1 18 13.4 27 ...
##  $ pcls     : Factor w/ 3 levels "baixa","media",..: 1 2 2 2 1 2 2 2 1 3 ...
##  $ lprod    : num  0.964 1.324 1.354 1.188 1.104 ...
##  $ prods    : num  84.6 445.2 510.8 237.2 161.3 ...

Escrever tabela

##-----------------------------------------------------------------------------
## Campos separados por ;.

write.table(batl, file="pimentel_batatinha_mod.txt", sep=";",
            row.names=FALSE, col.names=TRUE, quote=FALSE)

print(sessionInfo(), locale=FALSE)
## R version 3.1.1 (2014-07-10)
## Platform: i686-pc-linux-gnu (32-bit)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  base     
## 
## other attached packages:
## [1] plyr_1.8.1      reshape_0.8.5   rmarkdown_0.3.3 knitr_1.7      
## 
## loaded via a namespace (and not attached):
## [1] digest_0.6.4    evaluate_0.5.5  formatR_1.0     htmltools_0.2.6 methods_3.1.1  
## [6] Rcpp_0.11.3     stringr_0.6.2   tools_3.1.1     yaml_2.1.13
Sys.time()
## [1] "2014-11-12 22:21:25 BRST"