Cómo hacer referencia a columnas de un hoja.de.datos dentro de un hoja.de.datos?

StackOverflow https://stackoverflow.com/questions/2329036

  •  22-09-2019
  •  | 
  •  

Pregunta

Tengo un data.frame llamado series_to_plot.df que creé mediante la combinación de un número de otros data.frames juntos (mostrado a continuación). ahora quiero sacar sólo la columna .mm de cada uno de estos, por lo que puedo trazar ellos. Así que quiero sacar la tercera columna de cada hoja.de.datos (por ejemplo p3c3.mm, p3c4.mm etc ...), pero no puedo ver cómo se hace esto para todos data.frames en el objeto sin un bucle a través el nombre. ¿Es esto posible?

Me puede sacar un solo juego: por ejemplo, series_to_plot.df [[3]] y otro por series_to_plot.df [[10]] (lo que es sólo una lista de vectores ..) y me puede hacer referencia directamente con series_to_plot.df $ p3c3.mm, pero ¿hay un comando para obtener un vector que contiene toda mm de cada uno de los datos. ¿cuadro? Me esperaba un índice algo como esto para el trabajo: series_to_plot.df [3 [3]] pero devuelve un error en [.data.frame (series_to_plot.df,, 3 [3]): Columnas indefinidos seleccionados

series_to_plot.df
          p3c3.rd         p3c3.day    p3c3.mm      p3c3.sd                 p3c3.n p3c3.noo p3c3.no_NAs
    1     2010-01-04             0    0.1702531    0.04003364              7                1           0
    2     2010-01-06             2    0.1790594    0.04696674              7                1           0
    3     2010-01-09             5    0.1720404    0.03801756              8                0           0

          p3c4.rd         p3c4.day    p3c4.mm      p3c4.sd                 p3c4.n p3c4.noo p3c4.no_NAs
    1     2010-01-04             0    0.1076581   0.006542157              6                2           0
    2     2010-01-06             2    0.1393447   0.066758781              7                1           0
    3     2010-01-09             5    0.2056846   0.047722862              7                1           0

          p3c5.rd         p3c5.day    p3c5.mm      p3c5.sd                 p3c5.n p3c5.noo p3c5.no_NAs
    1     2010-01-04             0   0.07987147   0.006508766              7                1           0
    2     2010-01-06             2   0.11496167   0.046478767              8                0           0
    3     2010-01-09             5   0.40326471   0.210217097              7                1           0
¿Fue útil?

Solución

Para añadir a las otras respuestas, no creo que es una buena idea tener información útil codificada en los nombres de variables. Mucho mejor que reorganizar los datos de modo que toda la información útil es en el valor de alguna variable. No sé lo suficiente sobre el conjunto de datos para sugerir el formato adecuado, pero podría ser algo así como

p c         rd day date mm sd ...
3 3 2010-10-04 ...

Una vez que haya hecho esto la respuesta a su pregunta es la sencilla df$mm.

Si usted está recibiendo los datos en una forma menos útil a partir de una fuente externa, puede cambiar en una forma más útil como el de arriba dentro de R utilizando la función o funciones reshape del paquete reshape.

Otros consejos

Para obtener todas las columnas con nombre especificado que podría hacer:

names_with_mm <- grep("mm$", names(series_to_plot.df), value=TRUE)
series_to_plot.df[, names_with_mm]

Pero si su data.frame la base de todos tienen la misma estructura, entonces puede rbind ellos, algo como:

series_to_plot.df <- rbind(
  cbind(name="p3c3", p3c3),
  cbind(name="p3c4", p3c4),
  cbind(name="p3c5", p3c5)
)

A continuación, los valores mm están en una columna y es más fácil de trama.

La R lenguaje de definición de noreferrer nofollow tiene algo de información buena sobre la indexación (seg 3.4.1), que es bastante útil .

A continuación, puede tirar de los nombres que coinciden con una secuencia con el comando grep (). A continuación, la cadena que todos juntos de esta manera:

 dataWithMM <- series_to_plot.df[,grep("[P]", names(series_to_plot.df))]

para deconstruir un poco, esto se pone el número de las columnas que coincidan con el patrón "mm":

 namesThatMatch <- grep("[mm]", names(series_to_plot.df)

A continuación, utilizamos esa lista para llamar a las columnas que queremos:

  dataWithMM <- series_to_plot.df[, namesThatMatch ]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top