Tengo un marco de datos con 300 columnas, quiero dividir el marco de datos dependiendo de los valores en una columna Millage (MPG)

                      Model              MPG     Origin
1              chevrolet chevelle malibu 18.0     US
2                      buick skylark 320 15.0     US
3                     plymouth satellite 18.0     US
4                          amc rebel sst 16.0     US
5                            ford torino 17.0     US
6                       ford galaxie 500 15.0     US
7                       chevrolet impala 14.0     US
8                      plymouth fury iii 14.0     US
9                       pontiac catalina 14.0     US
10                    amc ambassador dpl 15.0     US
11                   dodge challenger se 15.0     US

Quiero dividir el marco de datos de tal manera.

Tengo un marco de datos con MPG de menos de 14, 14-17, mayor de 17.

Y es mi conjunto de datos principal, quiero dividirlo en conjuntos de datos bajo, medio y alto con los valores especificados anteriormente.

Estaba tratando de que el bucle agregue los valores inferiores a 13.6 y luego inserte la matriz en un marco de datos separado llamado bajo.

for(i in 1:nrow(y)){
  if(y[i,2] <13.6){
    low_arrayMPG.append(y[i,2])
    low_arrayModel.append(y[i,1])
    low_arrayOrigin.append(y[i,3])

  }

}

¿Alguien podría ayudarme si el enfoque es correcto o hay alguna función en R que pueda usar para este propósito exacto que haga que sea más fácil dividir los marcos de datos en sub marcos de datos deseados?

r
0
Padmaja Ganesh 21 oct. 2017 a las 09:49

3 respuestas

La mejor respuesta

Podríamos usar findInterval para crear una variable de agrupación para split ajustar el conjunto de datos en un list de data.frame s

lst <- split(df1, findInterval(df1$MPG, c(14, 17), rightmost.closed = TRUE))
3
akrun 21 oct. 2017 a las 07:32

Creo que puede subconjugar su marco de datos (df) de la siguiente manera:

df_low    <- df[df$MPR < 14, ]
df_medium <- df[df$MPR >= 14 & df$MPR <= 17, ]
df_high   <- df[df$MPR > 17, ]
3
Tim Biegeleisen 21 oct. 2017 a las 06:54

Quizás también te gusten estos:

split(df1,(df1$MPG>=14)+(df1$MPG>17))
# $`1`
# Model MPG Origin
# 2          buick skylark 320  15     US
# 4              amc rebel sst  16     US
# 5                ford torino  17     US
# 6           ford galaxie 500  15     US
# 7           chevrolet impala  14     US
# 8          plymouth fury iii  14     US
# 9           pontiac catalina  14     US
# 10        amc ambassador dpl  15     US
# 11       dodge challenger se  15     US
# 
# $`2`
# Model MPG Origin
# 1 chevrolet chevelle malibu  18     US
# 3        plymouth satellite  18     US


library(dplyr)
library(tidyr)
df1 %>% group_by(spl = (MPG>=14) + (MPG>17)) %>% nest
# # A tibble: 2 x 2
#       spl             data
#     <int>           <list>
#   1     2 <tibble [2 x 3]>
#   2     1 <tibble [9 x 3]>

datos

df1 <- read.table(text="                      Model              MPG     Origin
           1              'chevrolet chevelle malibu' 18.0     US
                  2              '        buick skylark 320' 15.0     US
                  3              '       plymouth satellite' 18.0     US
                  4              '            amc rebel sst' 16.0     US
                  5              '              ford torino' 17.0     US
                  6              '         ford galaxie 500' 15.0     US
                  7              '         chevrolet impala' 14.0     US
                  8              '        plymouth fury iii' 14.0     US
                  9              '         pontiac catalina' 14.0     US
                  10             '       amc ambassador dpl' 15.0     US
                  11             '      dodge challenger se' 15.0     US",header=T,stringsAsFactors=F)
0
Moody_Mudskipper 22 oct. 2017 a las 15:04