Aggiungere e ordinare
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 45 di 64.
Assegnare un nuovo nome di colonna aggiunge la colonna. Le operazioni aritmetiche tra colonne funzionano riga per riga, come qualsiasi operazione aritmetica tra vettori:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)Output:
item qty price total
1 tea 2 4.0 8.0
2 jam 5 2.5 12.5
3 oil 1 9.0 9.0df[order(df$col), ] ordina le righe in base a una colonna. I numeri delle righe a sinistra restano associati alle righe originali. Usa un segno meno o decreasing = TRUE per ordinare dal più alto al più basso, e una seconda chiave per risolvere le parità:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])Output:
item total
2 jam 12.5
3 oil 9.0
1 tea 8.0Una nuova colonna può essere un testo creato a partire da altre colonne. sprintf() funziona su intere colonne contemporaneamente:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)Output:
[1] "2 x tea" "5 x jam"rbind() aggiunge una riga da un data frame con una sola riga e le stesse colonne, mentre head(df, n) mantiene le prime n righe:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))Output:
[1] 3
item qty
2 jam 5
1 tea 2Sfida
FacileCompleta order_totals(df). df ha le colonne item, qty e price. Aggiungi una colonna total (quantità moltiplicata per il prezzo), ordina le righe per totale dal più alto al più basso (gli elementi con totali uguali in ordine alfabetico) e restituisci una riga per ogni riga, jam: 12.50, con il totale a due decimali.
Il codice fornito legge la tabella dall'input con read.csv(text = input): la prima riga contiene i nomi delle colonne e ogni riga successiva è una riga, con i valori separati da virgole. Il codice stampa ogni riga restituita.
Provalo tu
order_totals <- function(df) {
# Scrivi il tuo codice qui
character(0)
}
# Codice di input/output fornito: lascialo così com'è
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online