<-c(1, 2, 3, 4, 5)
number<-c("x", "y", "z", "w", "j")
letter<- c(TRUE, FALSE, FALSE, TRUE, FALSE)
logical<-1:10
seq<-data.frame(number, letter, logical)
dtclass(dt)
# usamos $ para acessar as colunas de um data.frame
$letter
dt# vetores de caracteres são interpretados como fatores
class(dt$letter)
# argumento stringsAsFactors = F altera este comportamento padrão
<-data.frame(number, letter, logical, stringsAsFactors = F)
dt$letter
dtclass(dt$letter)
# data.frames possuem colnames e rownames como atributos
attributes(dt)
colnames(dt)
row.names(dt)
# acessamos data.frames da mesma forma que matrizes
5,2] dt[
5 Data.frames
Um data.frame
é um tipo especial de lista, onde todos os elementos devem possuir o mesmo length. Por ser uma lista, cada posição comporta elementos de diferentes classes. Do ponto de vista prático, o data.frame
funciona como uma planilha bidimensional formado por vetores de mesmo tamanho, sendo cada vetor uma coluna:
5.0.1 Trabalhando com data.frames
Para acessar data.frames podemos usar os operadores []
, [[]]
e $
:
<-data.frame(number=c(1, 2, 3, 4, 5),
dtletter = c("x", "y", "z", "w", "j"),
logical = c(TRUE, FALSE, FALSE, TRUE, FALSE))
# [[ ]] acessa cada coluna por posição
1]]
dt[[# [ ] acessa as coordenadas [linha, coluna]
1]
dt[,# $ acessa a coluna pelo nome
$number
dt# carrega o data.frame mtcars
<-mtcars
cars# mostra as 6 primeiras linhas
head(cars)
# mostra as 6 ultimas linhas
tail(cars)
<- subset(mtcars, hp > 100)
cars_100hp cars_100hp
# data.frames possuem colnames e rownames
colnames(dt)
row.names(dt)
# podemos alterar colnames e rownames
row.names(dt)<-c("a", "b", "c", "d", "e")
# alterando apenas a posição 2
colnames(dt)[2]<-"letras"
# podemos alterar valores específicos de um data.frame
3,1]<-"10"
dt[$logical<-as.numeric(dt$logical)
dt$letras<-NA dt
É possível verificar as ocorrencias de um data.frame em outro:
<-data.frame(nomes=c("Carlos", "Roberto", "Olivio", "Joel"),
biometriaaltura=c(180, 187, 155, 168),
peso=c(80, 90, 98, 64))
biometria<-data.frame(nomes=c("Carlos", "Roberto", "Olivio", "Jomar"),
esportesesportes=c("futebol", "remo", "sumo", "maratona"))
esportes# retorna um vetor lógico
$nomes %in% esportes$nomes
biometria# pode ser usado como índice
<-biometria$nomes %in% esportes$nomes
idx<-biometria[idx,]
x
x# ordenando data.frames por uma coluna
<-biometria[with(biometria, order(altura)), ]
biometria biometria
<- cars[order(cars$mpg), ]
cars_sorted cars_sorted
Unindo data.frames com a função merge()
:
Independe da ordem dos data.frames a busca é feita pelo nome, não pela ordem o resultado sempre virá em ordem alfabética
<-merge(biometria, esportes, by="nomes")
unido
unido# as informações não disponíveis são preenchidas por NA
# com todos os presentes no primeiro
<-merge(biometria, esportes, by="nomes", all.x=T)
unido
unido# com todos os presentes no segundo
<-merge(biometria, esportes, by="nomes", all.y=T)
unido
unido# com todos presentes
<-merge(biometria, esportes, by="nomes", all=T)
unido unido
#load("Data/COGs.RData")
<- cogids %in% cog.human.data$cog_id
cogids_in_human all(cogids_in_human)
table(cog.human.data$OG_type)
<- subset(cog.human.data, OG_type == "COG")
cog_data <- subset(cog.human.data, OG_type == "NOG")
nog_data <- subset(cog.human.data, OG_type == "KOG") kog_data
length(unique(cog_data$cog_id))
length(unique(nog_data$cog_id))
length(unique(kog_data$cog_id))
5.1 Desafio
Os desafios a seguir foram criados para ajudá-lo a desenvolver suas habilidades de forma independente.
Evite o uso de Inteligência Artificial e tente resolver os problemas por conta própria.
Aprender com a prática fortalecerá seu raciocínio e aprofundará seu conhecimento! 🚀
- Crie os dataframes abaixo:
<- data.frame("Nome" = c("Bruno", "Dionisio","Eduardo", "Ana", "Silvia", "Elizete", "Renata", "Arlete", "Lucas"),
peso "Peso" = c(73, 68, 65, 73, 60, 65, 70, 83, 68), stringsAsFactors = F)
<- data.frame("Nome" = c("Davi", "Kevin","Eduardo","Lucas", "Antonio", "Moises", "Dionisio", "Ana", "Renata"),
altura "Altura" = c(150, 193, 152, 175, 191, 173, 180, 163, 178), stringsAsFactors = F)
<- data.frame("Nome" = c("Eloise", "Ana","Flavia","Dayse", "Eduardo", "Silvia", "Dionisio", "Renata", "Bruno"),
idade "Idade" = c(24, 27, 30, 21, 37, 18, 43, 26, 47), stringsAsFactors = F)
<- data.frame("Nome" = c("Dionisio", "Renata","Ana","Flavia", "Thais", "Daniel", "Fernanda", "Bárbara", "Henrique"),
profissao "Profissao" = c("Programador", "Pesquisadora", "Advogada", "Farmaceutica", "Bombeira Civil", "Cabelereiro",
"Cozinheira", "Estiliesta", "Professor"), stringsAsFactors = F)
No dataframe peso, verifique quantos valores iguais de peso existem.
No dataframe altura, verifique quantas e quais pessoas têm entre 163cm e 180cm.
Ordene o dataframe idade de forma descrescente.
Ordene o dataframe profissao lexicograficamente.
Verifique quais informações de Dionisio estão presentes nos 4 dataframes.
Altere a profissão da Renata para “Cientista”
Retorne quantas pessoas possuem todas as informações (Peso, Altura, Idade e Profissão) e armazene em um novo dataframe
- Com os seguintes dataframes, responda:
<- data.frame("genero" = c("Prevotella", "Prevotella", "Prevotella", "Streptococcus","Neisseria", "Neisseria",
amostra1 "Lactobacillus", "Bacteroides", "Anaerosporomusa"),
"especie" = c("Prevotella_copri", "Prevotella_denticola", "Prevotella_ruminicola", "Streptococcus_infantarius",
"Neisseria_gonorrhoeae", "Neisseria_meningitidis", "Lactobacillus_iners", "Bacteroides_xylanisolvens",
"Anaerosporomusa_subterranea"), stringsAsFactors = F)
<- data.frame("genero" = c("Prevotella", "Prevotella", "Streptococcus", "Streptococcus", "Neisseria", "Neisseria", "Bacteroides",
amostra2 "Fusobacterium", "Pseudoalteromonas", "Achromobacter", "Aggregatibacte"),
"especie" = c("Prevotella_denticola", "Prevotella_ruminicola", "Streptococcus_infantarius", "Streptococcus_equi",
"Neisseria_gonorrhoeae", "Neisseria_meningitidis", "Bacteroides_xylanisolvens", "Fusobacterium_nucleatum",
"Pseudoalteromonas_sp._S558", "Achromobacter_sp._KAs_3-5", "Aggregatibacter_actinomycetemcomitans"), stringsAsFactors = F)
Quantas espécies da amostra 1 também estão presentes na amostra 2?
Quantas espécies da amostra 2 também estão presentes na amostra 1?
Quais as posições e os valores dessas espécies?
- Considere o dataframe abaixo:
<- data.frame(col1 = 1:3, col2 = 2:4, col3 = 3:5) df
Faça a seleção dos elementos do dataframe utilizando duas abordagens diferentes: a abordagem utilizada na indexação de matrizes e a abordagem para indexação de listas.
Selecione a primeira coluna
3º elemento da 2ª coluna