2017-10-21 7 views
0

J'ai une trame de données avec 300 colonnes, je veux diviser la trame de données en fonction des valeurs dans une colonne Millage (MPG)Split une trame de données dans des trames de données sous en fonction des valeurs dans une colonne

     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 

Je veux diviser le cadre de données de telle sorte que.

J'ai une trame de données avec MPG de moins de 14 ans, 14-17, supérieur à 17.

y est mon jeu de données parent, je veux scinder en ensembles de données à faible, moyenne et élevée avec les valeurs indiquées ci-dessus .

J'essayais de nous pour la boucle d'ajouter les valeurs inférieures à 13,6 et ensuite insérer la matrice dans une trame de données distincte appelée faible.

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]) 

    } 

} 

Quelqu'un pourrait-il me aider si l'approche est bonne ou est-il une fonction R que je peux utiliser à cette fin précise qui sera plus facile de diviser les trames de données dans des trames de données sous souhaités?

Répondre

3

Nous pourrions utiliser findInterval pour créer une variable de regroupement pour split ting l'ensemble de données dans un list de data.frame s

lst <- split(df1, findInterval(df1$MPG, c(14, 17), rightmost.closed = TRUE)) 
3

Je pense que vous pouvez juste sous-ensemble de votre trame de données (df) comme suit:

df_low <- df[df$MPR < 14, ] 
df_medium <- df[df$MPR >= 14 & df$MPR <= 17, ] 
df_high <- df[df$MPR > 17, ] 
0

Peut-être que vous aimerez aussi:

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]> 

données

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)