Columnas y filas
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 43 de 64.
df$col y df[["col"]] devuelven una columna como un vector simple, por lo que cualquier función de vectores funciona con ella. [[ ]] acepta un nombre de columna almacenado en una variable:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people$age)
print(mean(people$age))
col <- "city"
print(people[[col]])Salida:
[1] 36 22 41
[1] 33
[1] "london" "paris" "rome" Los corchetes toman [row, column], como una matriz. Un lado vacío selecciona todo, y las columnas se pueden elegir por nombre:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[2, ])
print(people[, c("name", "city")])Salida:
name age city
2 bo 22 paris
name city
1 ada london
2 bo paris
3 cy romeUna celda es df[row, column], y asignarle un valor cambia su contenido. Asignar un valor a una columna completa funciona de la misma manera:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[3, "age"])
people[3, "age"] <- 42
people$city <- toupper(people$city)
print(people)Salida:
[1] 41
name age city
1 ada 36 LONDON
2 bo 22 PARIS
3 cy 42 ROMEPara recorrer las filas una por una, itera sobre seq_len(nrow(df)) y lee cada celda con df[i, "col"] o df$col[i]:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
for (i in seq_len(nrow(people))) {
cat(people$name[i], "lives in", people[i, "city"], "\n")
}Salida:
ada lives in london
bo lives in paris
cy lives in rome Desafío
FácilCompleta person_card(df, i). Devuelve una línea por columna para la fila i, name: bo, con el nombre de la columna y el valor de esa fila, en el orden de las columnas.
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 valores separados por comas. La última línea de entrada contiene i, y el código imprime cada línea devuelta.
Pruébalo tú mismo
person_card <- function(df, i) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
i <- as.numeric(input[length(input)])
cat(person_card(df, i), 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