我有一个包含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中是否有任何功能可以帮助我,我可以将其用于这个目的,这样可以更容易地将数据帧拆分成所需的子数据帧?
答案 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)