Introdução aos data.frames
0 Introdução aos data.frames
Neste capítulo vamos focar-nos em explicar uma classe de variáveis muito importante no R—os data.frames. Vamos ver que podemos representar a maioria das nossas bases de dados usando estas estruturas. Compreender bem como trabalhar com data.frames é essencial para poder importar, limpar, (re)formatar e analisar os nossos dados.
Vectores
Já vimos que a função c() combina os seus argumentos num vector e que podemos usá-la para combinar tudo e mais alguma coisa.
Também já vimos que o R nos permite fazer muitas coisas com os vectores, desde seleccionar valores que ficam em posições específicas, a realizar a mesma operação matemática em todos os elementos, a operações de lógica.
idade[1] # pedir o primeiro elemento.[1] 21
idade[3:5] # pedir todos os elementos entre 3 e 5.[1] 24 46 33
idade[-2] # pedir todos os elementos excepto o segundo.[1] 21 24 46 33 20 50 39 18 20
idade * 3 # multiplicar todos os elementos por 3. [1] 63 96 72 138 99 60 150 117 54 60
idade > 5 # ver quais os elementos maiores que 5. [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
idade[idade > 20] # pedir os elementos com maior que 20.[1] 21 32 24 46 33 50 39
Noções Gerais
Se repararmos nos exemplos anteriores vemos que cada vector, pode conter vários elementos mas só tem uma dimensão. No entanto, as bases de dados com que estamos habituados a trabalhar têm duas dimensões—linhas e colunas. Normalmente temos um variável por coluna e depois uma ou mais linhas por sujeito/observação.
Um vector só tem uma dimensão mas um data.frame já tem duas—linhas e colunas—portanto podemos usar um data.frame como base de dados. Na maioria, dos casos vamos importar os dados de um ficheiro e guardá-lo numa variável do tipo data.frame.
Antes de fazermos isso, vamos ver alguns exemplos mais simples, que nos podem ajudar a perceber como os conhecimentos que temos sobre vectores nos ajudam a trabalhar com os data.frames. Mais concretamente, vamos ver que no fundo podemos trabalhar com cada dimensão do data.frame como se fosse um vector.
Criar um data.frame
Para criarmos um data.frame usamos a função data.frame(), essa função leva como argumentos os nomes das colunas e os seus valores.
teste <- data.frame(coluna1 = c("valores", "da", "primeira", "coluna"),
coluna2 = c("valores", "diferentes", "na", "segunda"))
print(teste) coluna1 coluna2
1 valores valores
2 da diferentes
3 primeira na
4 coluna segunda
Se cada vector é unidimensional, podemos combinar vários vectores num só data.frame—um objecto bidimensional. Podemos fazê-lo de várias maneiras. Um exemplo intuitivo pode ser um caso em que tenhamos vários vectores como os de há pouco, cada um com os valores duma dada variável, que queremos combinar numa base de dados.
dados <- data.frame(idade = idade, genero = as.factor(genero), rts = rts)
# as.factor(genero) vai guardar a variável género como factorial.print(idade) [1] 21 32 24 46 33 20 50 39 18 20
print(genero) [1] "M" "F" "M" "F" "F" "F" "M" "M" "F" "M"
print(rts) [1] 1435 4352 2232 2820 4552 6454 6500 1005 9001 2003
print(dados) idade genero rts
1 21 M 1435
2 32 F 4352
3 24 M 2232
4 46 F 2820
5 33 F 4552
6 20 F 6454
7 50 M 6500
8 39 M 1005
9 18 F 9001
10 20 M 2003
Aceder às Linhas dum data.frame
Da mesma maneira que para acedermos ao primeiro valor do vector idade escrevíamos:
idade[1][1] 21
Para aceder à primeira linha do data.frame dados (que criámos há pouco) basta escrevermos:
dados[1, ]| idade | genero | rts |
|---|---|---|
| 21 | M | 1435 |
Se reparem, a única diferença é que agora acrescentámos uma vírgula. Temos de fazer isso porque separamos cada dimensão dos objectos com uma vírgula. Assim sendo, o primeiro valor à esquerda da vírgula corresponde à linha. Portanto se quisermos a segunda linha, escrevemos:
dados[2, ]| idade | genero | rts | |
|---|---|---|---|
| 2 | 32 | F | 4352 |
Por outro lado, se quisermos todas as linhas menos a segunda, escrevemos:
dados[-2, ]| idade | genero | rts | |
|---|---|---|---|
| 1 | 21 | M | 1435 |
| 3 | 24 | M | 2232 |
| 4 | 46 | F | 2820 |
| 5 | 33 | F | 4552 |
| 6 | 20 | F | 6454 |
| 7 | 50 | M | 6500 |
| 8 | 39 | M | 1005 |
| 9 | 18 | F | 9001 |
| 10 | 20 | M | 2003 |
Da mesma maneira que podíamos pedir uma sequência de valores dum vector usando a notação início:fim, por exemplo:
idade[3:5][1] 24 46 33
Também podemos pedir várias linhas, usando a mesma notação, por exemplo:
dados[3:5, ]| idade | genero | rts | |
|---|---|---|---|
| 3 | 24 | M | 2232 |
| 4 | 46 | F | 2820 |
| 5 | 33 | F | 4552 |
No geral, vamos poder fazer tudo o que fazemos com os vectores, com as linhas dos data.frames.
idade * 3 [1] 63 96 72 138 99 60 150 117 54 60
idade > 5 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
dados[1, ] * 3| idade | genero | rts |
|---|---|---|
| 63 | NA | 4305 |
dados[1, ] > 5 idade genero rts
1 TRUE NA TRUE
Nota: O R pode avisar-nos que algumas operações podem não fazer sentido para alguns tipos de variáveis (como foi o caso com o género), ou mesmo dar erro se a operação não for permitida.
Aceder às Colunas dum data.frame
Para trabalhar com as colunas dum data.frame podemos fazer tudo o que fazemos com as linhas, sendo que escrevemos o/s números da/s coluna/s à direita da vírgula.
dados[ ,1] [1] 21 32 24 46 33 20 50 39 18 20
dados[ ,2:3]| genero | rts |
|---|---|
| M | 1435 |
| F | 4352 |
| M | 2232 |
| F | 2820 |
| F | 4552 |
| F | 6454 |
| M | 6500 |
| M | 1005 |
| F | 9001 |
| M | 2003 |
dados[ ,-2]| idade | rts |
|---|---|
| 21 | 1435 |
| 32 | 4352 |
| 24 | 2232 |
| 46 | 2820 |
| 33 | 4552 |
| 20 | 6454 |
| 50 | 6500 |
| 39 | 1005 |
| 18 | 9001 |
| 20 | 2003 |
dados[ ,1] * 3 [1] 63 96 72 138 99 60 150 117 54 60
dados[ ,1] > 5 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Caso as colunas tenham nomes (como na maioria dos nossos casos) também podemos aceder às colunas usando o seu nome. Para isso podemos usar a notação base_de_dados$nome_da_coluna ou a notação base_de_dados[ ,"nome_da_coluna"].
Isso quer dizer que para vermos a coluna idade podemos escrever:
dados$idade [1] 21 32 24 46 33 20 50 39 18 20
# Ou
dados[ ,"idade"] [1] 21 32 24 46 33 20 50 39 18 20
Como podemos descobrir os nomes das colunas? Basta invocarmos a função colnames() usando o nosso data.frame como argumento.
colnames(dados)[1] "idade" "genero" "rts"
Já vimos que o data.frame dados tem duas dimensões—linhas e colunas. Também já vimos como podemos aceder às suas linhas e colunas. Pensando que cada coluna (e linha) só tem uma dimensão, percebemos que podemos colunas como argumentos de algumas funções, que já conhecemos que aceitam, vectores como argumentos.
Exemplos:
mean(dados$idade)[1] 30.3
mean(dados$rts)[1] 4035.4
sd(dados$rts)[1] 2619.45
max(dados$rts)[1] 9001
summary(dados$rts) Min. 1st Qu. Median Mean 3rd Qu. Max.
1005 2060 3586 4035 5978 9001
table(dados$genero)
F M
5 5
summary(dados$genero)F M
5 5
Ao mesmo tempo, se pensarmos que cada coluna pode corresponder a uma variável do nosso estudo, começamos a ter uma noção de como vamos poder usar as funções do R nas nossas análises estatísticas…
Nota: Os data.frame também podem ter nomes de linhas (que aparecem à esquerda como se fossem uma coluna extra sem nome) mas normalmente esses nomes não nos dão jeito.
print(dados) idade genero rts
1 21 M 1435
2 32 F 4352
3 24 M 2232
4 46 F 2820
5 33 F 4552
6 20 F 6454
7 50 M 6500
8 39 M 1005
9 18 F 9001
10 20 M 2003
Às vezes podem corresponder ao número da linha, que por vezes é o número do participante. Mesmo nesses casos, dá-nos mais jeito ter os números dos participantes numa coluna do que nos nomes da linha.
Se quisermos saber os nomes das linhas podemos usar a função row.names().
row.names(dados) [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
[1] "new_name1" "new_name2" "new_name3" "new_name4" "new_name5"
[6] "new_name6" "new_name7" "new_name8" "new_name9" "new_name10"
Se quisermos apagar esses nomes para não nos confundirem podemos escrever:
Quando apagamos os nomes das linhas eles são substituídos apenas pelos números das linas, logo não ganhamos nada em tentar apagar os nomes das linhas se eles forem apenas os seus números. nome à esquerda.
Aceder às Linhas e Colunas dum data.frame
Já vimos que os data.frame têm duas dimensões [linhas, colunas]. Então para termos só uma célula basta acedermos a uma linha uma coluna [linha, coluna].
# Primeira célula da primeira coluna.
dados[1, 1][1] 21
# Segunda célula da terceira coluna.
dados[2, 3][1] 4352
Podemos também aceder apenas a alguns “bocados”, isto é conjuntos de linhas e colunas do data.frame. Por exemplo, para obtermos as primeiras três linhas da primeira coluna, escrevemos:
dados[1:3, 1][1] 21 32 24
Se quisermos a primeira linha da duas primeiras colunas, escrevemos:
dados[1, 1:2]| idade | genero |
|---|---|
| 21 | M |
Podemos também usar um vector com os nomes das colunas que queremos:
dados[1, c("idade", "genero")]| idade | genero |
|---|---|
| 21 | M |
Nota: Reparem que se quisermos mais que pôr os nomes de várias colunas temos mesmo de os colocar num vector. Se separarmos os nomes por vírgulas, sem usar a função c() o R vai dar erro, dado que as vírgulas dentro dos parêntesis rectos (e fora de funções) separam dimensões do objecto e os data.frames só têm duas.
dados[1, "idade", "genero"]Error in `drop && length(x) == 1L`:
! invalid 'x' type in 'x && y'
Explorar um data.frame
Como podemos explorar a nossa base de dados, por exemplo, para saber as suas dimensões, estrutura, ou mesmo visualizá-la?
Para descobrir o número de colunas usamos a função ncol(), para o número de linhas a função nrow(), para sabermos as dimensões (i.e., as linhas e colunas) usamos dim().
# número de colunas.
ncol(dados)[1] 3
# número de linhas.
nrow(dados)[1] 10
# Os dois.
dim(dados)[1] 10 3
Para espreitarmos o topo ou o fim da nossa base de dados podemos usar as funções head() e tail() respectivamente.
head(dados)| idade | genero | rts |
|---|---|---|
| 21 | M | 1435 |
| 32 | F | 4352 |
| 24 | M | 2232 |
| 46 | F | 2820 |
| 33 | F | 4552 |
| 20 | F | 6454 |
tail(dados)| idade | genero | rts | |
|---|---|---|---|
| 5 | 33 | F | 4552 |
| 6 | 20 | F | 6454 |
| 7 | 50 | M | 6500 |
| 8 | 39 | M | 1005 |
| 9 | 18 | F | 9001 |
| 10 | 20 | M | 2003 |
Também podemos usar a função str() para perceber a sua estrutura.
str(dados)'data.frame': 10 obs. of 3 variables:
$ idade : num 21 32 24 46 33 20 50 39 18 20
$ genero: Factor w/ 2 levels "F","M": 2 1 2 1 1 1 2 2 1 2
$ rts : num 1435 4352 2232 2820 4552 ...
Para visualizarmos a base de dados numa spreadsheet parecida com as do Libreoffice Calc ou Microsoft Excel podemos usar a função View().
View(dados)Alterar, Criar e Apagar Linhas, Colunas e Células
Já explorámos várias formas de como podemos trabalhar com as nossas bases de dados, mas se reparem, ainda não vimos nenhuma forma de como as alterar. Se o R só permitisse seleccionar células, fazer operações com linhas e colunas, mas não permitisse alterar, apagar, e criar colunas, linhas, ou mesmo células individuais, teríamos de estar sempre a abrir o Libreoffice Calc, o Microsoft Excel ou outro programa para fazer essas operações. Assim não teríamos como usufruir das vantagens do R para esses procedimentos, por exemplo, não ficaríamos com um script que registasse e permitisse reproduzir o processo de limpeza dos dados.
Alterar Valores
Felizmente, podemos usar o que já aprendemos para fazer essas operações. Por exemplo, podemos fazer operações matemáticas com uma coluna, guardando o resultado nessa própria coluna, alterando assim o seu valor. Parece complicado, mas é daquelas operações que é muito fácil de ler no código apesar de ser difícil de explicar com linguagem natural.
Imaginem que tínhamos registado os tempos de resposta em milissegundos e queríamos convertê-los para segundos.
Sendo que um segundo são 1000 milissegundos, basta dividirmos os milissegundos por 1000 para obtermos os segundos.
dados$rts / 1000 [1] 1.435 4.352 2.232 2.820 4.552 6.454 6.500 1.005 9.001 2.003
Mas como não guardámos o resultado em nenhuma variável continuamos a ter os tempos de resposta em milissegundos na base de dados.
dados$rts [1] 1435 4352 2232 2820 4552 6454 6500 1005 9001 2003
Mas se guardarmos o resultado da conversão na própria coluna alteramos o seu valor.
dados$rts <- dados$rts / 1000
print(dados) idade genero rts
1 21 M 1.435
2 32 F 4.352
3 24 M 2.232
4 46 F 2.820
5 33 F 4.552
6 20 F 6.454
7 50 M 6.500
8 39 M 1.005
9 18 F 9.001
10 20 M 2.003
Podemos usar a mesma lógica para alterar um valor duma linha. Por exemplo, para alterar os dados do primeiro participante.
idade genero rts
1 31 F 3.521
2 32 F 4.352
3 24 M 2.232
4 46 F 2.82
5 33 F 4.552
6 20 F 6.454
7 50 M 6.5
8 39 M 1.005
9 18 F 9.001
10 20 M 2.003
O mesmo raciocínio ajuda-nos a perceber como podemos alterar os valores duma só célula. Para alterar a idade do terceiro participante poderíamos escrever:
dados[3, "idade"] <- 52
print(dados) idade genero rts
1 31 F 3.521
2 32 F 4.352
3 52 M 2.232
4 46 F 2.82
5 33 F 4.552
6 20 F 6.454
7 50 M 6.5
8 39 M 1.005
9 18 F 9.001
10 20 M 2.003
Apagar Colunas
Para apagarmos colunas basta atribuirmos o valor muito especial de NULL a essa coluna.
AVISO: Como as outras operações que alteram valores das variáveis, esta operação é irreversível.
Para podermos experimentar usar estas operações e não perdermos dados que precisaremos para exemplos futuros, podemos começar por copiar a nossa base de dados para uma nova variável.
teste <- dados
print(teste) idade genero rts
1 31 F 3.521
2 32 F 4.352
3 52 M 2.232
4 46 F 2.82
5 33 F 4.552
6 20 F 6.454
7 50 M 6.5
8 39 M 1.005
9 18 F 9.001
10 20 M 2.003
Agora que criámos a variável teste, podemos usá-la em algumas experiências.
Por exemplo podemos apagar a primeira coluna.
teste[ ,1] <- NULLAgora podemos confirmar se a variável teste se mantém parecida com a dados, sendo que a variável dados vai ter mais uma coluna.
ncol(dados)[1] 3
ncol(teste)[1] 2
print(dados) idade genero rts
1 31 F 3.521
2 32 F 4.352
3 52 M 2.232
4 46 F 2.82
5 33 F 4.552
6 20 F 6.454
7 50 M 6.5
8 39 M 1.005
9 18 F 9.001
10 20 M 2.003
print(teste) genero rts
1 F 3.521
2 F 4.352
3 M 2.232
4 F 2.82
5 F 4.552
6 F 6.454
7 M 6.5
8 M 1.005
9 F 9.001
10 M 2.003
Nota: A variável teste continua a ter uma primeira coluna.
teste[ ,1] [1] F F M F F F M M F M
Levels: F M
Mas essa primeira coluna tem agora os valores que estavam na segunda, e a segunda tem os valores da terceira.
Também podemos apagar colunas usando os seus nomes.
teste$rts <- NULL
print(teste) genero
1 F
2 F
3 M
4 F
5 F
6 F
7 M
8 M
9 F
10 M
Apagar Linhas
Para apagarmos linhas não lhes podemos atribuir o valor de NULL como fizemos para as colunas. O que podemos fazer então?
Antes de avançarmos vamos voltar a copiar a nossa base de dados para a variável teste.
teste <- dados
print(teste) idade genero rts
1 31 F 3.521
2 32 F 4.352
3 52 M 2.232
4 46 F 2.82
5 33 F 4.552
6 20 F 6.454
7 50 M 6.5
8 39 M 1.005
9 18 F 9.001
10 20 M 2.003
Como podemos então apagar linhas? Temos de fazer alguma batota e dizer que a nossa base de dados é igual a ela própria sem essas linhas. Por exemplo, para apagar a linha 1.
teste <- teste[-1, ]
# Apagar os nomes das linhas para evitar bugs com os números/nomes de cada
row.names(teste) <- NULLCriar Linhas e Colunas
Para criar colunas basta usarmos a notação base_de_dados$nome_da_coluna usando um nome duma coluna que não existe.
Por exemplo:
teste$nova_coluna <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)Para criarmos uma nova linha (algo menos frequente no dia a dia), basta indicarmos um ou vários números de linha que não existem.
Sabendo que o data.frame teste tem nove linhas:
nrow(teste)[1] 9
Podemos acrescentar uma décima escrevendo:
idade genero rts nova_coluna
1 32 F 4.352 1
2 52 M 2.232 2
3 46 F 2.82 3
4 33 F 4.552 4
5 20 F 6.454 5
6 50 M 6.5 6
7 39 M 1.005 7
8 18 F 9.001 8
9 20 M 2.003 9
10 24 M 3.005 10
Nota: Reparem que se não soubermos o número de linhas podemos simplesmente escrever:
Mudar os Nomes das Colunas.
Já vimos que para apagar os nomes das linhas podíamos escrever:
row.names(teste) <- NULLDa mesma forma, se quisermos apagar os nomes das colunas, podemos escrever:
colnames(teste) <- NULLSe repararem as colunas do data.frame teste já não têm nome.
print(teste)
1 32 F 4.352 1
2 52 M 2.232 2
3 46 F 2.82 3
4 33 F 4.552 4
5 20 F 6.454 5
6 50 M 6.5 6
7 39 M 1.005 7
8 18 F 9.001 8
9 20 M 2.003 9
10 24 M 3.005 10
11 66 F 1.02 11
Na prática, isto não é algo que queiramos fazer dado que normalmente os nomes das colunas correspondem a nomes das nossas variáveis. O que pode ser mais frequente é querermos mudar os nomes das colunas para algo que nos faça mais sentido, que seja mais rápido de escrever, etc…
Para mudarmos os nomes das colunas podemos escrever:
Nota: Ás vezes podemos querer mudar o nome de apenas uma ou algumas colunas. Seria cansativo termos de escrever todos os nomes das colunas para mudar apenas um. Para além disso, o nome que queríamos mudar ficava facilmente perdido no meio dos outros não sendo fácil de perceber qual era o nome da coluna que estávamos a mudar. Por isso, no capítulo seguinte, veremos como mudar os nomes de apenas uma ou algumas colunas.
Juntar data.frames
Uma das vantagens do R, é podermos trabalhar facilmente com vários data.frames (mesmo que sejam bases de dados distintas) ao mesmo tempo.
Se tivermos dois data.frames com o mesmo número de linhas podemos juntá-los lado a lado. Para isso basta usarmos a função cbind().
Como o data.frame dados tem uma linha a menos que o teste não podemos usar a função cbind() sem primeiro apagar uma linha.
dim(dados)[1] 10 3
dim(teste)[1] 11 4
# Apaga a última linha do data.frame teste.
teste <- teste[-nrow(teste), ]De seguida já podemos usar a função cbind() para combinar os data.frames.
cbind(dados, teste)| idade | genero | rts | idade | genero | rts_seg | participante |
|---|---|---|---|---|---|---|
| 31 | F | 3.521 | 32 | F | 4.352 | 1 |
| 32 | F | 4.352 | 52 | M | 2.232 | 2 |
| 52 | M | 2.232 | 46 | F | 2.82 | 3 |
| 46 | F | 2.82 | 33 | F | 4.552 | 4 |
| 33 | F | 4.552 | 20 | F | 6.454 | 5 |
| 20 | F | 6.454 | 50 | M | 6.5 | 6 |
| 50 | M | 6.5 | 39 | M | 1.005 | 7 |
| 39 | M | 1.005 | 18 | F | 9.001 | 8 |
| 18 | F | 9.001 | 20 | M | 2.003 | 9 |
| 20 | M | 2.003 | 24 | M | 3.005 | 10 |
Se guardarmos o output dessa função numa nova variável ficamos com mais um data.frame.
idade genero rts idade genero rts_seg participante
1 31 F 3.521 32 F 4.352 1
2 32 F 4.352 52 M 2.232 2
3 52 M 2.232 46 F 2.82 3
4 46 F 2.82 33 F 4.552 4
5 33 F 4.552 20 F 6.454 5
6 20 F 6.454 50 M 6.5 6
7 50 M 6.5 39 M 1.005 7
8 39 M 1.005 18 F 9.001 8
9 18 F 9.001 20 M 2.003 9
10 20 M 2.003 24 M 3.005 10
Se quisermos juntar data.frames que tenham as mesmas colunas (i.e., o mesmo número e o mesmo nome), podemos usar a função rbind(). A título de exemplo podemos invocar a função repetindo o mesmo data.frame para termos a certeza que tem as mesmas colunas.
rbind(dados, dados)| idade | genero | rts |
|---|---|---|
| 31 | F | 3.521 |
| 32 | F | 4.352 |
| 52 | M | 2.232 |
| 46 | F | 2.82 |
| 33 | F | 4.552 |
| 20 | F | 6.454 |
| 50 | M | 6.5 |
| 39 | M | 1.005 |
| 18 | F | 9.001 |
| 20 | M | 2.003 |
| 31 | F | 3.521 |
| 32 | F | 4.352 |
| 52 | M | 2.232 |
| 46 | F | 2.82 |
| 33 | F | 4.552 |
| 20 | F | 6.454 |
| 50 | M | 6.5 |
| 39 | M | 1.005 |
| 18 | F | 9.001 |
| 20 | M | 2.003 |
Caso queiramos juntar data.frames lado a lado que tenham números de linhas diferentes, ou se quisermos juntar pelas linhas (i.e., rbind()) data.frames com colunas diferentes, teremos de seguir outras abordagens. O pacote dplyr traz funções que nos podem ajudar, mas deixaremos esses casos mais tarde.
Exercícios
Tentem resolver todos os problemas sem consultar as soluções.
Exercício 1
- Crie uma variável do tipo
data.framecom os seguintes dados.
| coluna1 | coluna2 | coluna3 |
|---|---|---|
| 1 | a | 100 |
| 2 | b | 200 |
| 3 | c | 300 |
| 4 | d | 400 |
| 5 | e | 500 |
Aceda à primeira linha do
data.frameque criou.Aceda à terceira coluna.
Aceda à primeira célula da segunda coluna.
Aceda às linhas dois a quatro da primeira e segunda colunas.
Soluções
Clique para ver as soluções
dados <- data.frame(coluna1 = c(1, 2, 3, 4, 5),
coluna2 = c("a", "b", "c", "d", "e"),
coluna3 = c(100, 200, 300, 400, 500))
dados[1, ]| coluna1 | coluna2 | coluna3 |
|---|---|---|
| 1 | a | 100 |
dados[ , 3][1] 100 200 300 400 500
dados[1, 2][1] "a"
dados[2:4, 1:2]| coluna1 | coluna2 | |
|---|---|---|
| 2 | 2 | b |
| 3 | 3 | c |
| 4 | 4 | d |
Exercício 2
Crie uma nova coluna chamada
metadeque guarde os resultados da divisão dos valores dacoluna3por dois.Apague a coluna
metade.Crie uma cópia do
data.frameque não inclua as duas primeiras linhas.Apague a última linha dessa cópia do
data.frame.
Soluções
Clique para ver as soluções
Exercício 3
Quais os valores da
coluna3que são superiores a 100?Seleccione apenas as linhas do
data.framedadoscujos valores na colunacoluna1são inferiores a 5.Responda à alínea anterior sem usar o caractere
$.Seleccione os valores da
coluna1referentes a participantes com valores superiores a 200 nacoluna3.Dê novos nomes às colunas do
data.frame.Verifique se os nomes foram alterados.
Soluções
Clique para ver as soluções
dados$coluna3[dados$coluna3 > 100][1] 200 300 400 500
dados[dados$coluna1 < 5, ]| coluna1 | coluna2 | coluna3 |
|---|---|---|
| 1 | a | 100 |
| 2 | b | 200 |
| 3 | c | 300 |
| 4 | d | 400 |
dados[dados[ ,1] < 5, ]| coluna1 | coluna2 | coluna3 |
|---|---|---|
| 1 | a | 100 |
| 2 | b | 200 |
| 3 | c | 300 |
| 4 | d | 400 |
dados[dados$coluna3 > 200, "coluna1"][1] 3 4 5
[1] "novo1" "novo2" "novo3"
# head(dados), tail(dados), print(dados), ou View(dados) também dariam.