es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo imprimir un dataframe como texto (cadena) mezclando los valores y los nombres de las columnas en R.

Tengo un dataframe que es una colección de algunas métricas de rendimiento para modelos de ML:

Input:

structure(list(Method = c("Logistic Regression", "Naive Bayes", 
"Tree", "Neural Network", "AdaBoost", "CN2 rule inducer", "kNN", 
"SVM", "SGD", "Constant"), AUC = c(0.732, 0.729, 0.678, 0.674, 
0.654, 0.651, 0.649, 0.64, 0.591, 0.5), CA = c(0.684, 0.694, 
0.694, 0.684, 0.681, 0.681, 0.66, 0.691, 0.667, 0.625), F1 = c(0.413, 
0.463, 0.429, 0.413, 0.418, 0.403, 0.372, 0.44, 0.4, 0), Precision = c(0.681, 
0.679, 0.717, 0.681, 0.66, 0.674, 0.604, 0.686, 0.615, 0), Recall = c(0.296, 
0.352, 0.306, 0.296, 0.306, 0.287, 0.269, 0.324, 0.296, 0)), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

Necesito combinar esto en una fila en un archivo de excel, sin embargo, es tedioso copiar cada nombre de columna por cada fila. Entonces me gustaría obtener todo como un string (o una lista de strings) que diga: [Nombre del modelo]: Nombre deCol1 valor1, Nombre deCol2 valor2,... y así sucesivamente. Algo como esto:

`Regresión logística: AUC 0.732, CA 0.684, F1 0.413, Precisión 0.681, Recall 0.296
 Naive Bayes: AUC 0.729, CA 0.694, F1 0.463, Precisión 0.679, Recall 0.352
 Árbol ... (y así sucesivamente).`

También está bien todo en una línea:

Regresión logística: AUC 0.732, CA 0.684, F1 0.413, Precisión 0.681, Recall 0.296 Naive Bayes: AUC 0.729, CA 0.694, F1 0.463, Precisión 0.679, Recall 0.352 Árbol... (y así sucesivamente)

Pero no sé cómo puedo hacer esto agregando cada nombre de columna antes de cada valor. Agradecería cualquier ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una cadena de las métricas de rendimiento y nombres de columnas de cada modelo, se puede utilizar la función paste() para combinar los valores de cada columna con sus respectivos nombres de columna. Luego se puede utilizar apply() para aplicar esta operación a cada fila del dataframe, y finalmente utilizar paste() nuevamente para combinar las cadenas de cada modelo en una cadena larga. Este es el código:

    # crear un vector de cadenas para cada fila
    model_strings <- apply(df, 1, function(x) {
      paste0(x[1], ": ", 
             paste0(names(x)[-1], " ", round(x[-1], 3), collapse = ", "))
    })
    
    # combinar las cadenas en una cadena larga
    resultado <- paste0(model_strings, collapse = " ")
    

    Esto te dará una cadena con las métricas de rendimiento y los nombres de las columnas de cada modelo separados por comas, y los modelos separados por espacios. Puedes ajustar el redondeo de los valores cambiando el segundo argumento de round().

Comments are closed.