-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cap03-08-Funcoes-Especiais.R
137 lines (93 loc) · 2.82 KB
/
Cap03-08-Funcoes-Especiais.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Funções Especiais
# Obs: Caso tenha problemas com a acentuação, consulte este link:
# https://support.rstudio.com/hc/en-us/articles/200532197-Character-Encoding
# Configurando o diretório de trabalho
# Coloque entre aspas o diretório de trabalho que você está usando no seu computador
# Não use diretórios com espaço no nome
setwd("C:/FCD/BigDataRAzure/Cap03")
getwd()
# unlist()
# Produz um vetor com os elementos da lista
?unlist
lst1 <- list(6, "b", 15)
lst1
class(lst1)
unlist(lst1)
vec1 <- unlist(lst1)
class(vec1)
vec1
lst2 <- list(v1 = 6, v2 = list(381, 2190), v3 = c(30, 217))
lst2
unlist(lst2)
mean(unlist(lst2))
round(mean(unlist(lst2)))
# do.call()
# Executa uma função em um objeto
# *** ATENÇÃO ***
# As funções da família apply aplicam uma função a cada elemento de um objeto (substitui um loop)
# A função do.call aplica uma função ao objeto inteiro e não a cada elemento individualmente
?do.call
data <- list()
N <- 100
for (n in 1:N) {
data[[n]] = data.frame(index = n, char = sample(letters, 1), z = rnorm(1))
}
head(data)
do.call(rbind, data)
class(do.call(rbind, data))
# lapply() x do.call()
y <- list(1:3, 4:6, 7:9)
y
lapply(y, sum)
do.call(sum, y)
# O resultado da função lapply() pode ser obtido de outras formas
# Pacote plyr
install.packages('plyr')
library(plyr)
y <- list(1:3, 4:6, 7:9)
y
ldply(y, sum)
# strsplit()
# Divide uma string ou vetor de caracteres
texto <- "Data Science Academy"
strsplit(texto, " ")
texto <- "Data Science Academy"
strsplit(texto, "")
dates <- c("1998-05-23", "2008-12-30", "2009-11-29")
temp <- strsplit(dates, "-")
temp
class(temp)
# Transforma a lista em matriz, fazendo antes um unlist()
matrix(unlist(temp), ncol = 3, byrow = TRUE)
Names <- c("Brin, Sergey", "Page, Larry",
"Dorsey, Jack", "Glass, Noah",
"Williams, Evan", "Stone, Biz")
temp <- strsplit(Names, ", ")
temp
frase <- "Muitas vezes temos que repetir algo diversas vezes e essas diversas vezes parecem algo estranho"
palavras <- strsplit(frase, " ")[[1]]
palavras
unique(tolower(palavras))
# strplit() com dataframes
antes = data.frame(attr = c(1,30,4,6), tipo = c('pao_e_agua','pao_e_agua_2'))
antes
strsplit(as.character(antes$tipo),'_e_')
library(stringr)
str_split_fixed(antes$tipo, "_e_", 2)
# Usando do.call()
antes = data.frame(attr = c(1,30,4,6), tipo = c('pao_e_agua','pao_e_agua_2'))
antes
depois <- strsplit(as.character(antes$tipo),'_e_')
depois
do.call(rbind, depois)
# Usando dplyr e tidyr
install.packages("dplyr")
install.packages("tidyr")
library(dplyr)
library(tidyr)
antes <- data.frame(
attr = c(1, 30 ,4 ,6 ),
tipo = c('pao_e_agua','pao_e_agua_2')
)
antes %>%
separate(tipo, c("pao", "agua"), "_e_")