Operações com Conjuntos
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 13 de 64.
Três funções combinam dois vetores como conjuntos. Cada uma retorna valores sem repetições:
union(a, b) contém os valores presentes em qualquer um dos vetores, intersect(a, b) contém os valores presentes em ambos, e setdiff(a, b) contém os valores de a que não estão em b.
mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy", "ben")
print(union(mon, tue))
print(intersect(mon, tue))
print(setdiff(mon, tue))Saída:
[1] "ana" "ben" "cy" "dee"
[1] "ben" "cy"
[1] "ana"setdiff() depende da ordem de seus argumentos. Inverta-os para obter os valores que estão apenas no segundo vetor:
mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy")
print(setdiff(tue, mon))Saída:
[1] "dee"Quando não resta nada, o resultado é um vetor vazio, character(0) para texto:
print(intersect(c("a", "b"), c("x", "y")))Saída:
character(0)The results keep the order of the first vector. Sort them when the output needs a predictable order, and check for an empty result before joining:
a <- c("pear", "fig", "kiwi")
b <- c("kiwi", "pear")
both <- sort(intersect(a, b))
print(paste(both, collapse = ", "))
print(length(setdiff(b, a)) == 0)Saída:
[1] "kiwi, pear"
[1] TRUEDesafio
FácilComplete compare_courses(a, b). a e b são os alunos de dois cursos. Retorne três linhas:
Both:seguidos pelos alunos de ambos os cursosOnly first:seguidos pelos alunos presentes somente emaTotal:seguido pelo número de alunos diferentes nos dois cursos
Ordene os nomes em cada lista e una-os com , . Uma lista vazia é escrita como none.
O código fornecido lê os dois cursos como linhas separadas por vírgulas e imprime cada linha retornada.
Experimente você mesmo
compare_courses <- function(a, b) {
# Escreva seu código aqui
c("Both: ", "Only first: ", "Total: 0")
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
cat(compare_courses(strsplit(input[1], ",")[[1]], strsplit(input[2], ",")[[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