2017-10-21 56 views
0

我有300列的数据帧的子数据帧,我想分裂取决于值在一列中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 

数据帧我想分割这样的数据框。

我有一个数据帧有MPG的小于14,14-17,大于17

y是我的父数据集我想与上面指定的值,以将其分割成低,中和高的数据集。

我试图给我们循环添加小于13.6的值,然后将矩阵插入一个名为low的单独数据框中。

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

    } 

} 

谁能帮助我,如果该方法是正确的,还是有R中的任何功能,我可以使用这个确切的目的,这将使它更容易分裂的数据帧到所需的子数据帧?

回答

3

我们可以使用findInterval创建split婷数据集分组变量为data.framelist小号

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

我想你可以只子集的数据帧(df)如下:

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

也许你还会喜欢这些:

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

数据

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)