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
Anterior
Próximo