2015-02-08 54 views
0

我想根据特定因式列中的值创建一系列数据框,这些数据框是主数据框的子集。R如何通过列对带for循环的数据框进行子集

下面是我的数据和代码:

>max_value_found 

    Group Mileage HiLo 
1 car  808 Hi  
2 train 162993 Lo 
3 car  19386 Hi  
4 walk  231 Lo 



>levels(max_value_found$group) 

[1] "car"  "train"  "bike"  "walk" 

>for(i in levels(max_value_found$group)) 
+{ x=paste(i,"_max_value",sep="") 
+ x 
+ x <-subset(max_value_found, max_value_found$group==i) 
+} 

>car_max_value 

Error: object 'car_max_value' not found 

我没有得到一个错误,但我没有得到任何新的数据帧,或者,据我可以告诉使用LS()。

我想要做的是让R循环遍历级别列表并粘贴级别名称到结果数据框名称中,并使用相同级别为子集的数据框内容的主数据框子集。

我可以手动写出各个子集的声明,但想知道如何为将来做到这一点。

我有类似的代码工作循环通过相同的列来生成一系列的直方图,但这是困扰我。

感谢您的帮助

+1

也许你可以从split(max_value_found,max_value_found $ group)开始' – 2015-02-08 20:36:05

+0

好吧我不知道split命令,所以谢谢你。我也在寻找它来提供作为结果数据框一部分的级别。 – Jazzmine 2015-02-08 20:39:12

+0

你是什么意思?你有'组'列中的层次,也有数据框的名称 – 2015-02-08 20:42:42

回答

0

正如大卫在评论中指出:

max_value_found <- data.frame(Group = c("car", "train", "car", "walk"), 
           Mileage = c(808, 162993, 19386, 231), 
           HiLo = c("Hi", "Lo", "Hi", "Lo")) 


> list1 <- split(max_value_found, max_value_found$Group) 
> list1 
$car 
Group Mileage HiLo 
1 car  808 Hi 
3 car 19386 Hi 

$train 
Group Mileage HiLo 
2 train 162993 Lo 

$walk 
Group Mileage HiLo 
4 walk  231 Lo 

编辑:设置这些自由进入全球环境再次使用大卫的代码:

> list2env(list1, .GlobalEnv) 
<environment: R_GlobalEnv> 
> ls() 
[1] "car"    "list1"   "max_value_found" "train"   
[5] "walk"   
> str(car) 
'data.frame': 2 obs. of 3 variables: 
$ Group : Factor w/ 3 levels "car","train",..: 1 1 
$ Mileage: num 808 19386 
$ HiLo : Factor w/ 2 levels "Hi","Lo": 1 1 
> str(train) 
'data.frame': 1 obs. of 3 variables: 
$ Group : Factor w/ 3 levels "car","train",..: 2 
$ Mileage: num 162993 
$ HiLo : Factor w/ 2 levels "Hi","Lo": 2 
> car 
    Group Mileage HiLo 
1 car  808 Hi 
3 car 19386 Hi 
> train 
    Group Mileage HiLo 
2 train 162993 Lo 

我不认为这是一个很好的举措。您最好从列表中访问数据帧,即list1$carlist1[["car"]]

+1

什么类型的列表split(max_value_found,max_value_found $ Group)'给你?它不是已经命名了吗? – 2015-02-08 21:21:53

+0

你可以保留'split'答案,这样问题就会得到解答。 – 2015-02-08 21:24:51

+0

好吧,我明白了,list1是一组数据框。有没有办法将它们分成不同的数据框?除此之外,我认为这将工作得很好。谢谢 – Jazzmine 2015-02-08 23:16:07