Resumos de Linhas e Colunas
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 19 de 64.
rowSums() e rowMeans() retornam um resultado por linha; colSums() e colMeans(), um por coluna. Aqui, cada linha representa um estudante e cada coluna, um teste:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(rowMeans(scores))
print(colSums(scores))Saída:
[1] 80.00000 73.33333
[1] 140 165 155Para qualquer outro resumo, apply(m, 1, f) chama f em cada linha e apply(m, 2, f) em cada coluna:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(apply(scores, 1, max))
print(apply(scores, 2, min))Saída:
[1] 90 85
[1] 60 75 70Combine um resumo com which.max() para descobrir qual linha ou coluna vence:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
best_test <- which.max(colMeans(scores))
print(best_test)
print(round(rowMeans(scores), 1))Saída:
[1] 2
[1] 80.0 73.3apply() também aceita uma função que você escreve na hora com function(r). Aqui, ela conta os valores maiores que 5 em cada linha:
m <- matrix(c(3, 8, 1, 9, 2, 7), nrow = 2, byrow = TRUE)
print(apply(m, 1, function(r) sum(r > 5)))Saída:
[1] 1 2Desafio
FácilComplete class_report(scores). Cada linha de scores representa um aluno e cada coluna, uma prova. Retorne uma linha por aluno, Student 1: 81.7, com a média do aluno arredondada para uma casa decimal. Adicione uma última linha Best test: seguida pelo número da coluna com a maior média.
O código fornecido lê uma matriz de uma linha: as linhas são separadas por ; e os valores de uma linha por ,; portanto, 1,2;3,4 é uma matriz com as linhas 1 2 e 3 4. O código imprime cada linha retornada.
Experimente você mesmo
class_report <- function(scores) {
# Escreva seu código aqui
character(0)
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(class_report(parse_matrix(input[1])), sep = "\n")
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online