R - Textos e Datas

  • Tratando Texto
  • Tratando Datas

Trabalhando com Texto

Concatena caracteres paste()

Concatena caracteres:

> x= "Estatística"
> paste(x,"Computacional")
## [1] "Estatística Computacional"

paste() - separação de palavras

Concatena caracteres:

  1. sem espaço entre palavras
    • paste(x,“Computacional”,sep="") \[EstatísticaComputacional\]
  2. outros separadores entre palavras
    • paste(x,“Computacional”,sep=“;”) \[Estatística;Computacional\]

paste() - escolhendo o separados

> 
> paste("Prezado", "Sr.", "R", sep = "-")
## [1] "Prezado-Sr.-R"

paste() - objetos de tamanho diferentes

> paste("V", 101:105, sep = ".")
## [1] "V.101" "V.102"
## [3] "V.103" "V.104"
## [5] "V.105"

paste() - com collapse

> # collapse = "")
> paste("V", 101:105, sep = ".", collapse = "")
## [1] "V.101V.102V.103V.104V.105"
> 
> # collapse = "/")
> paste("V", 101:105, sep = ".", collapse = "/")
## [1] "V.101/V.102/V.103/V.104/V.105"

cat() - concatena e “print”

> nome="Jorge"
> 
> cat(nome, "Aprovado",  sep = " -> ")
## Jorge -> Aprovado

Subdivide caracteres - strsplit()

> x=c("romualdo/ronaldo")
> strsplit(x,"/")
## [[1]]
## [1] "romualdo"
## [2] "ronaldo"

Substitui caracteres - sub()

Substitui caracteres:

> x=c("rondonia", "roraima")
> sub("r","R",x)
## [1] "Rondonia"
## [2] "Roraima"
> 
> #veja também o gsub()

Número de caracteres - nchar()

> x= c("caracter","outro caracter")
> nchar(x)
## [1]  8 14

Subdividindo palavras - substr()

> x=c("nome01","nome02")
> substr(x, start=1, stop=4)
## [1] "nome" "nome"

substr()

> x=c("nome01","nome02")
> substr(x, start=5,stop=6)
## [1] "01" "02"

combinação formatada - sprintf()

> a <- seq(1,101,25)
> sprintf("%03d", a)
## [1] "001" "026"
## [3] "051" "076"
## [5] "101"
> 
> sprintf("name_%03d", a)
## [1] "name_001"
## [2] "name_026"
## [3] "name_051"
## [4] "name_076"
## [5] "name_101"

Maiúsculas - toupper() e tolower()

> x= c("maiuscula", "minuscula")
> # tudo minúsculo
> toupper(x)
## [1] "MAIUSCULA"
## [2] "MINUSCULA"

Minúsculas - tolower()*

> x= c("MAIUSCULA","MINUSCULA")
> tolower(x)
## [1] "maiuscula"
## [2] "minuscula"

Exercício

  1. Seja o vetor de códigos x = 0012,0013,0014,0015. Construa um novo vetor incluindo o prefixo 33 a cada elemento de x.(Solução_4.01)

  2. Sejam os usuários de um sistema: alm33, jcc41 e wrg17. Construa um vetor com os e-mails sabendo que o provedor é o “gmai.com”. (Solução_4.02)

Exercício (continuação)

  1. E um diretório tem os arquivos Aj1.csv,Aj2.xls,Bf1.csv,bf2.csv,Bg3.xls. Quantos são os “xls” e os “csv”. Construa uma tabela. (Solução_4.03)

  2. Uma lista de nomes: jose, antonio, paula e marita devem iniciar com maiúscula. Construa um programa para isso. (Solução_4.04)

  3. Seja o vetor com o nome de tabelas: tabela1,tabela2,tabela11,tabela101. Crie um vetor com o nome das tabelas. Ordene de forma crescente. A tabela101 é a última? Como deve ser arrumado a nomenclatura das tabelas para correta ordenação? (Solução_4.05)

Solução_4.01

  1. Seja o vetor de códigos x = 0012,0013,0014,0015. Construa um novo vetor incluindo o prefixo 33 a cada elemento de x.
> x=c("0012","0013","0014","0015")
> paste("33",x,sep="")
## [1] "330012"
## [2] "330013"
## [3] "330014"
## [4] "330015"

Retorna

Solução_4.02

  1. Sejam os usuários de um sistema: alm33, jcc41 e wrg17. Construa um vetor com os e-mails sabendo que o provedor é o “gmai.com”.
> user=c("alm33", "jcc41", "wrg17")
> email=paste(user,"gmail.com",sep="@")

Retorna

Solução_4.03

  1. E um diretório tem os arquivos Aj1.csv,Aj2.xls,Bf1.csv,bf2.csv,Bg3.xls. Quantos são os “xls” e os “csv”. Construa uma tabela.
> files=c("A1.csv","A2.xls","B1.csv","b2.csv","B3.xls")
> sep_file=strsplit(files,"[.]")
> extent=unlist(sep_file)[c(2,4,6,8,10)]
> table(extent)
## extent
## csv xls 
##   3   2

Retorna

Solução_4.04

  1. Uma lista de nomes: jose, antonio, paula e marita devem iniciar com maiúscula. Construa um programa para isso.
> nomes=c("jose", "antonio", "paula" , "marita")
> substr(nomes,1,1)=toupper(substr(nomes,1,1))
> nomes
## [1] "Jose"   
## [2] "Antonio"
## [3] "Paula"  
## [4] "Marita"

Retorna

Solução_4.05

  1. Seja o vetor com o nome de tabelas: tabela1,tabela2,tabela11,tabela101. Crie um vetor com o nome das tabelas. Ordene de forma crescente. A tabela101 é a última? Como deve ser arrumado a nomenclatura das tabelas para correta ordenação?
> tabelas=c("tabela1","tabela2","tabela11","tabela101")
> sort(tabelas)
## [1] "tabela1"  
## [2] "tabela101"
## [3] "tabela11" 
## [4] "tabela2"
> # tabela101 é a segunda (ordem lexicográfica)
> ord=sub("tabela","",tabelas)
> ord
## [1] "1"   "2"  
## [3] "11"  "101"
> sprintf("tabela_%03i", as.numeric(ord)) 
## [1] "tabela_001"
## [2] "tabela_002"
## [3] "tabela_011"
## [4] "tabela_101"

Retorna

Trabalhando com Datas

as.Date()

Transformando character em Date

> xd = as.Date("2017-09-13")
> xd
## [1] "2017-09-13"
> class(xd)
## [1] "Date"

as.Date() formato

> xd = "2017/09/13"
> as.Date(xd, "%Y/%m/%d")
## [1] "2017-09-13"

as.Date() formato

> xd = "13/09/17"
> as.Date(xd, "%d/%m/%y")
## [1] "2017-09-13"

weekdays()

> xd = as.Date("2017-09-13")
> weekdays(xd)
## [1] "quarta-feira"

Soma e Subtração com datas

> xd + 7
## [1] "2017-09-20"

Sequencias de datas

> xd+ 0:6
## [1] "2017-09-13"
## [2] "2017-09-14"
## [3] "2017-09-15"
## [4] "2017-09-16"
## [5] "2017-09-17"
## [6] "2017-09-18"
## [7] "2017-09-19"

Datas com seq()

> ini=as.Date("2015-01-01")
> xm = seq(ini, by="6 months", length.out=6)
> xm
## [1] "2015-01-01"
## [2] "2015-07-01"
## [3] "2016-01-01"
## [4] "2016-07-01"
## [5] "2017-01-01"
## [6] "2017-07-01"

months()

> months(xm)
## [1] "janeiro"
## [2] "julho"  
## [3] "janeiro"
## [4] "julho"  
## [5] "janeiro"
## [6] "julho"

data do sistema operacional

> Sys.Date()
## [1] "2020-10-20"

data do sistema operacional (format)

> format(Sys.Date(), "%d %b %Y") 
## [1] "20 out 2020"

Data e hora

> ## read in date/time info in format 'm/d/y h:m:s'
> dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
> times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26")
> x <- paste(dates, times)
> strptime(x, "%m/%d/%y %H:%M:%S")
## [1] "1992-02-27 23:03:20 -03"
## [2] "1992-02-27 22:29:56 -03"
## [3] "1992-01-14 01:03:30 -02"
## [4] "1992-02-28 18:21:03 -03"
## [5] "1992-02-01 16:56:26 -02"

funções com datas

  • são dependentes das configurações do comptador (local, lingua…)
  • para mais informações sobre formatação de data e hora (?strptime)

Exercícios

  1. Crie o vetor de datas: 10.09.17, 11.09.17, 12.09.17, 13.09.17. (Solução_5.01)

  2. Usando o vetor do item 01. Quantos dias úteis tem no referido mês? (Solução_5.02)

  3. Construa um programa para calcular o tempo, em dias, de uma data de referencia até o dia de hoje. Quantos dias se passaram desde o Mundial da Russia (15 de julho de 2018)? Quantos dias faltam para o Mundial do Catar (21/11/2022)? (Solução_5.03)

Solução_5.01

  1. Crie o vetor de datas: 10.09.17, 11.09.17, 12.09.17, 13.09.17.
> x=as.Date(c("10.09.17", "11.09.17", 
+             "12.09.17", "13.09.17"),"%d.%m.%y")

Retorna

Solução_5.02

  1. Usando o vetor do item 01. Quantos dias úteis tem o mês de setembro no referido ano?
> # considerando que não há feriados
> #
> x1=seq(x[1]-9, x[1]+20, by= "day" )
> weekdays(x1)
##  [1] "sexta-feira"  
##  [2] "sábado"       
##  [3] "domingo"      
##  [4] "segunda-feira"
##  [5] "terça-feira"  
##  [6] "quarta-feira" 
##  [7] "quinta-feira" 
##  [8] "sexta-feira"  
##  [9] "sábado"       
## [10] "domingo"      
## [11] "segunda-feira"
## [12] "terça-feira"  
## [13] "quarta-feira" 
## [14] "quinta-feira" 
## [15] "sexta-feira"  
## [16] "sábado"       
## [17] "domingo"      
## [18] "segunda-feira"
## [19] "terça-feira"  
## [20] "quarta-feira" 
## [21] "quinta-feira" 
## [22] "sexta-feira"  
## [23] "sábado"       
## [24] "domingo"      
## [25] "segunda-feira"
## [26] "terça-feira"  
## [27] "quarta-feira" 
## [28] "quinta-feira" 
## [29] "sexta-feira"  
## [30] "sábado"
> # considerando os dias como números
> wd=strftime(x1,"%u") #(7 = "domingo")
> length(as.numeric(wd)<6)
## [1] 30

Retorna

Solução_5.03

  1. Construa um programa para calcular o tempo, em dias, de uma data de referencia até o dia de hoje. Quantos dias se passaram do Mundial da Russia (15 de julho de 2018)? Quantos dias faltam para o Mundial do Catar (21/11/2022)?
> as.Date("2018-07-15")-Sys.Date()
## Time difference of -828 days
> as.Date("2022-11-21")-Sys.Date()
## Time difference of 762 days

Retorna