Filtrando Linhas
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 44 de 64.
Um vetor lógico com um valor por linha seleciona as linhas em que ele é TRUE. Coloque-o antes da vírgula e deixe o lado das colunas vazio para manter todas as colunas:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))Saída:
name age city
1 ada 36 london
3 cy 41 rome
[1] 2Combine condições com & (ambas) e | (qualquer uma). Cada parte compara uma coluna inteira, portanto o resultado ainda tem um valor por linha:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])Saída:
name age city
1 ada 36 london
[1] "bo" "cy"subset(df, condition) faz o mesmo com um código mais curto, pois dentro dele os nomes das colunas podem ser usados diretamente:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)Saída:
[1] "ada" "cy" Quando nenhuma linha corresponde, o resultado é um data frame com 0 linhas; portanto, verifique nrow() antes de fazer a leitura dele:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])Saída:
[1] 0
[1] "none"Desafio
FácilComplete adults_in(df, city). df tem as colunas name, age e city. Retorne os nomes das pessoas que têm pelo menos 18 anos e moram em city, na ordem das linhas e unidos por , , ou none.
O código fornecido lê a tabela da entrada com read.csv(text = input): a primeira linha contém os nomes das colunas e cada linha seguinte é uma linha, com os valores separados por vírgulas. A última linha da entrada contém a cidade, e o código imprime o valor retornado.
Experimente você mesmo
adults_in <- function(df, city) {
# Escreva seu código aqui
"none"
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), 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