Filtrado de filas
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 44 de 64.
Un vector lógico con un valor por fila selecciona las filas en las que es TRUE. Colócalo antes de la coma y deja vacío el lado de las columnas para conservar todas las columnas:
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, ]))Salida:
name age city
1 ada 36 london
3 cy 41 rome
[1] 2Combina condiciones con & (ambas) y | (cualquiera). Cada parte compara una columna completa, por lo que el resultado sigue teniendo un valor por fila:
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"])Salida:
name age city
1 ada 36 london
[1] "bo" "cy"subset(df, condition) hace lo mismo con un código más corto, porque dentro de ella los nombres de las columnas se pueden usar directamente:
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)Salida:
[1] "ada" "cy" Cuando ninguna fila coincide, el resultado es un marco de datos con 0 filas, así que comprueba nrow() antes de leerlo:
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])Salida:
[1] 0
[1] "none"Desafío
FácilCompleta adults_in(df, city). df tiene las columnas name, age y city. Devuelve los nombres de las personas que tienen al menos 18 años y viven en city, en el orden de las filas y unidos con , , o none.
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. La última línea de entrada contiene la ciudad, y el código imprime el valor devuelto.
Pruébalo tú mismo
adults_in <- function(df, city) {
# Escribe tu código aquí
"none"
}
# Código de entrada/salida suministrado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), 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