Menu
Coddy logo textTech

Adición y ordenación

Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 45 de 64.

Asignar un nuevo nombre de columna agrega la columna. La aritmética entre columnas funciona fila por fila, como cualquier operación aritmética con vectores:

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)

Salida:

  item qty price total
1  tea   2   4.0   8.0
2  jam   5   2.5  12.5
3  oil   1   9.0   9.0

df[order(df$col), ] ordena las filas por una columna. Los números de fila de la izquierda permanecen asociados a las filas originales. Usa un signo menos o decreasing = TRUE para ordenar de mayor a menor, y una segunda clave para los empates:

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")])

Salida:

  item total
2  jam  12.5
3  oil   9.0
1  tea   8.0

Una nueva columna puede ser texto construido a partir de otras columnas. sprintf() funciona en columnas completas a la vez:

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)

Salida:

[1] "2 x tea" "5 x jam"

rbind() añade una fila de un marco de datos de una sola fila con las mismas columnas, y head(df, n) conserva las primeras n filas:

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))

Salida:

[1] 3
  item qty
2  jam   5
1  tea   2
challenge icon

Desafío

Fácil

Completa order_totals(df). df tiene las columnas item, qty y price. Añade una columna total (cantidad por precio), ordena las filas por total de mayor a menor (los artículos con totales iguales, alfabéticamente) y devuelve una línea por fila, jam: 12.50, con el total con dos decimales.

El código proporcionado lee la tabla de la entrada con read.csv(text = input): la primera línea contiene los nombres de las columnas y cada línea siguiente es una fila, con los valores separados por comas. El código imprime cada línea devuelta.

Pruébalo tú mismo

order_totals <- function(df) {
  # Escribe tu código aquí
  character(0)
}

# Código de entrada/salida suministrado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de R online