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.0df[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.0Una 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 2Desafío
FácilCompleta 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")
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
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online