Data Frames
Criação
nome <- c("Carlos", "Bruna", "Jéssica", "Tiago", "Marta")
cidade <- c("Goiânia", "Belo Horizonte", "São Paulo", "Maceió", "Belo Horizonte")
idade <- c(20, 33, 18, 45, 27)
salario <- c(2500, 3800, 4100, 2900, 3000)
df <- data.frame(nome, cidade, idade, salario)
df
## nome cidade idade salario
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
## 4 Tiago Maceió 45 2900
## 5 Marta Belo Horizonte 27 3000
df <- data.frame(NOME = nome, CIDADE = cidade, IDADE = idade, SALARIO = salario)
df
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
## 4 Tiago Maceió 45 2900
## 5 Marta Belo Horizonte 27 3000
Datasets built-in
Carregando o dataset iris:
data(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Para visualizar a lista de datasets built-in do R, execute data()
.
Informações
Visualizando as dimensões do dataset:
dim(df)
## [1] 5 4
Visualizando o número de linhas dataset:
nrow(df)
## [1] 5
Visualizando o número de colunas dataset:
ncol(df)
## [1] 4
Visualizando a estrutura do dataset:
str(df)
## 'data.frame': 5 obs. of 4 variables:
## $ NOME : chr "Carlos" "Bruna" "Jéssica" "Tiago" ...
## $ CIDADE : chr "Goiânia" "Belo Horizonte" "São Paulo" "Maceió" ...
## $ IDADE : num 20 33 18 45 27
## $ SALARIO: num 2500 3800 4100 2900 3000
Visualizando as 6 primeiras linhas:
head(df)
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
## 4 Tiago Maceió 45 2900
## 5 Marta Belo Horizonte 27 3000
Visualizando as 3 primeiras linhas:
head(df, 3)
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
Visualizando as 6 últimas linhas:
tail(df)
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
## 4 Tiago Maceió 45 2900
## 5 Marta Belo Horizonte 27 3000
Visualizando as 3 últimas linhas:
tail(df, 3)
## NOME CIDADE IDADE SALARIO
## 3 Jéssica São Paulo 18 4100
## 4 Tiago Maceió 45 2900
## 5 Marta Belo Horizonte 27 3000
Resumindo as variáveis:
summary(df)
## NOME CIDADE IDADE SALARIO
## Length:5 Length:5 Min. :18.0 Min. :2500
## Class :character Class :character 1st Qu.:20.0 1st Qu.:2900
## Mode :character Mode :character Median :27.0 Median :3000
## Mean :28.6 Mean :3260
## 3rd Qu.:33.0 3rd Qu.:3800
## Max. :45.0 Max. :4100
Indexação
Colunas
Selecionando a terceira coluna:
df[,3] ## retorna um vetor
## [1] 20 33 18 45 27
Selecionando a coluna IDADE:
df$IDADE ## retorna um vetor
## [1] 20 33 18 45 27
df[,"IDADE"] ## retorna um vetor
## [1] 20 33 18 45 27
df[["IDADE"]] ## retorna um vetor
## [1] 20 33 18 45 27
df["IDADE"] ## retorna uma data.frame
## IDADE
## 1 20
## 2 33
## 3 18
## 4 45
## 5 27
Selecionando as três primeiras colunas:
df[,1:3]
## NOME CIDADE IDADE
## 1 Carlos Goiânia 20
## 2 Bruna Belo Horizonte 33
## 3 Jéssica São Paulo 18
## 4 Tiago Maceió 45
## 5 Marta Belo Horizonte 27
df[,c(1,2,3)]
## NOME CIDADE IDADE
## 1 Carlos Goiânia 20
## 2 Bruna Belo Horizonte 33
## 3 Jéssica São Paulo 18
## 4 Tiago Maceió 45
## 5 Marta Belo Horizonte 27
df[, c(TRUE, TRUE, TRUE, FALSE)]
## NOME CIDADE IDADE
## 1 Carlos Goiânia 20
## 2 Bruna Belo Horizonte 33
## 3 Jéssica São Paulo 18
## 4 Tiago Maceió 45
## 5 Marta Belo Horizonte 27
Linhas
Selecionando a segunda linha:
df[2,]
## NOME CIDADE IDADE SALARIO
## 2 Bruna Belo Horizonte 33 3800
Selecionando as três primeiras linhas:
df[1:3,]
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
df[c(1,2,3),]
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
df[c(TRUE, TRUE, TRUE, FALSE, FALSE),]
## NOME CIDADE IDADE SALARIO
## 1 Carlos Goiânia 20 2500
## 2 Bruna Belo Horizonte 33 3800
## 3 Jéssica São Paulo 18 4100
Células
Selecionando a célula localizada na primeira linha e segunda coluna:
df[1,2]
## [1] "Goiânia"
Selecionando a célula localizada na primeira linha e na coluna CIDADE:
df[1, "CIDADE"]
## [1] "Goiânia"
df$CIDADE[1]
## [1] "Goiânia"
Selecionando as células localizadas na primeira linha e segunda e quarta colunas:
df[1, c(2,4)]
## CIDADE SALARIO
## 1 Goiânia 2500
Selecionando as células localizadas as três primeiras linhas e três primeiras colunas:
df[1:3, 1:3]
## NOME CIDADE IDADE
## 1 Carlos Goiânia 20
## 2 Bruna Belo Horizonte 33
## 3 Jéssica São Paulo 18
Adição
Coluna
Adicionando a coluna SOBRENOME:
nova_coluna <- c("Santana", "Oliveira", "dos Santos", "da Cruz", "Fonseca")
df$SOBRENOME <- nova_coluna
df
## NOME CIDADE IDADE SALARIO SOBRENOME
## 1 Carlos Goiânia 20 2500 Santana
## 2 Bruna Belo Horizonte 33 3800 Oliveira
## 3 Jéssica São Paulo 18 4100 dos Santos
## 4 Tiago Maceió 45 2900 da Cruz
## 5 Marta Belo Horizonte 27 3000 Fonseca
Adicionando a coluna STATUS:
status <- c("ativo", "ativo", "inativo", "ativo", "inativo")
df[, "STATUS"] <- status
df
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS
## 1 Carlos Goiânia 20 2500 Santana ativo
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo
## 3 Jéssica São Paulo 18 4100 dos Santos inativo
## 4 Tiago Maceió 45 2900 da Cruz ativo
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo
Adicionando a coluna IDADE_x2:
df$IDADE_x2 <- df$IDADE * 2
df
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_x2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
Linha
Adicionando uma nova linha:
nova_linha <- data.frame(NOME = "Joana", CIDADE = "Porto Alegre", IDADE = 62, SALARIO = 3600, SOBRENOME = "da Silva", STATUS = "ativo", IDADE_x2 = 124)
nova_linha
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_x2
## 1 Joana Porto Alegre 62 3600 da Silva ativo 124
df <- rbind(df, nova_linha)
df
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_x2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Colunas são vetores?
is.vector(df$IDADE)
## [1] TRUE
class(df$IDADE)
## [1] "numeric"
Medidas estatísticas
Média:
mean(df$SALARIO)
## [1] 3316.667
Mediana:
median(df$SALARIO)
## [1] 3300
Mínimo:
min(df$SALARIO)
## [1] 2500
Máximo:
max(df$SALARIO)
## [1] 4100
Variância:
var(df$SALARIO)
## [1] 373666.7
Desvio padrão:
sd(df$SALARIO)
## [1] 611.2828
Quartis:
quantile(df$SALARIO)
## 0% 25% 50% 75% 100%
## 2500 2925 3300 3750 4100
Decis:
quantile(df$SALARIO, probs = seq(0, 1, 0.1))
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 2500 2700 2900 2950 3000 3300 3600 3700 3800 3950 4100
Frequência:
table(df$STATUS)
##
## ativo inativo
## 4 2
prop.table(table(df$STATUS))
##
## ativo inativo
## 0.6666667 0.3333333
Nomes
Colunas
Exibindo os nomes das colunas:
colnames(df)
## [1] "NOME" "CIDADE" "IDADE" "SALARIO" "SOBRENOME" "STATUS"
## [7] "IDADE_x2"
Alterando o nome da segunda coluna:
colnames(df)[2] <- "cidade"
head(df)
## NOME cidade IDADE SALARIO SOBRENOME STATUS IDADE_x2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Alterando o nome de todas as colunas:
novos_nomes <- c("Nome", "Cidade", "Idade", "Salario", "Sobrenome", "Status", "Idade_x2")
colnames(df) <- novos_nomes
head(df)
## Nome Cidade Idade Salario Sobrenome Status Idade_x2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Transformando todos os nomes em letras maiúsculas:
colnames(df) <- toupper(colnames(df))
head(df)
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_X2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Linhas
Exibindo os nomes das linhas:
rownames(df)
## [1] "1" "2" "3" "4" "5" "6"
Alternado o nome da segunda linha:
rownames(df)[2] <- "linha_2"
head(df)
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_X2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## linha_2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Alterando o nome de todas as linhas:
novos_nomes <- c("linha1", "linha2", "linha3", "linha4", "linha5", "linha6")
rownames(df) <- novos_nomes
head(df)
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_X2
## linha1 Carlos Goiânia 20 2500 Santana ativo 40
## linha2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## linha3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## linha4 Tiago Maceió 45 2900 da Cruz ativo 90
## linha5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## linha6 Joana Porto Alegre 62 3600 da Silva ativo 124
rownames(df) <- 1:nrow(df)
head(df)
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_X2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Remoção
Colunas
head(df)
## NOME CIDADE IDADE SALARIO SOBRENOME STATUS IDADE_X2
## 1 Carlos Goiânia 20 2500 Santana ativo 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira ativo 66
## 3 Jéssica São Paulo 18 4100 dos Santos inativo 36
## 4 Tiago Maceió 45 2900 da Cruz ativo 90
## 5 Marta Belo Horizonte 27 3000 Fonseca inativo 54
## 6 Joana Porto Alegre 62 3600 da Silva ativo 124
Removendo sexta coluna:
df <- df[, -6]
head(df)
## NOME CIDADE IDADE SALARIO SOBRENOME IDADE_X2
## 1 Carlos Goiânia 20 2500 Santana 40
## 2 Bruna Belo Horizonte 33 3800 Oliveira 66
## 3 Jéssica São Paulo 18 4100 dos Santos 36
## 4 Tiago Maceió 45 2900 da Cruz 90
## 5 Marta Belo Horizonte 27 3000 Fonseca 54
## 6 Joana Porto Alegre 62 3600 da Silva 124
Removendo a segunda e quarta coluna:
df <- df[, c(-2, -4)]
head(df)
## NOME IDADE SOBRENOME IDADE_X2
## 1 Carlos 20 Santana 40
## 2 Bruna 33 Oliveira 66
## 3 Jéssica 18 dos Santos 36
## 4 Tiago 45 da Cruz 90
## 5 Marta 27 Fonseca 54
## 6 Joana 62 da Silva 124
Removendo a coluna IDADE:
df$IDADE <- NULL
Linhas
Removendo a primeira linha:
df <- df[-1,]
head(df)
## NOME SOBRENOME IDADE_X2
## 2 Bruna Oliveira 66
## 3 Jéssica dos Santos 36
## 4 Tiago da Cruz 90
## 5 Marta Fonseca 54
## 6 Joana da Silva 124
Removendo a terceira e quinta linha:
df <- df[c(-3,-5),]
head(df)
## NOME SOBRENOME IDADE_X2
## 2 Bruna Oliveira 66
## 3 Jéssica dos Santos 36
## 5 Marta Fonseca 54
Combinando data frames
df_a <- data.frame(nome = c("Roberto", "Maria", "Andressa"),
sobrenome = c("Santos", "Andrade", "Fonseca"))
df_a
## nome sobrenome
## 1 Roberto Santos
## 2 Maria Andrade
## 3 Andressa Fonseca
df_b <- data.frame(nome = c("Rosana", "Júlio", "Edson"),
sobrenome = c("Ferreira", "da Cruz", "Silva"))
df_b
## nome sobrenome
## 1 Rosana Ferreira
## 2 Júlio da Cruz
## 3 Edson Silva
Unindo os datasets df_a e df_b linha a linha:
df_linha <- rbind(df_a, df_b)
df_linha
## nome sobrenome
## 1 Roberto Santos
## 2 Maria Andrade
## 3 Andressa Fonseca
## 4 Rosana Ferreira
## 5 Júlio da Cruz
## 6 Edson Silva
df_c <- data.frame(nome = c("Roberto", "Maria", "Andressa"),
idade = c(30, 41, 17))
df_c
## nome idade
## 1 Roberto 30
## 2 Maria 41
## 3 Andressa 17
Unindo os datasets df_a e df_c coluna a coluna:
df_coluna <- cbind(df_a, df_c)
df_coluna
## nome sobrenome nome idade
## 1 Roberto Santos Roberto 30
## 2 Maria Andrade Maria 41
## 3 Andressa Fonseca Andressa 17
Combinando os datasets df_a e df_c:
df_comb <- merge(df_a, df_c, by = "nome")
df_comb
## nome sobrenome idade
## 1 Andressa Fonseca 17
## 2 Maria Andrade 41
## 3 Roberto Santos 30