根据列中的值将数据帧拆分为子数据帧

时间:2017-10-21 06:49:53

标签: r

我有一个包含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 个答案:

答案 0 :(得分:3)

我认为你可以按照以下方式对数据框(df)进行子集化:

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

答案 1 :(得分:3)

我们可以使用<small>findInterval数据集创建分组变量为split list

data.frame

答案 2 :(得分: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)