2015-02-08 3 views
0

Я хочу создать серию фреймов данных, которые являются подмножествами основного блока данных, основанного на значениях в определенном столбце.R Как подмножество DataFrame с циклом 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)' –

+0

Хорошо, я не знал о команде split, поэтому спасибо вам за это. Я также ищу его, чтобы обеспечить уровень как часть результирующего фрейма. – Jazzmine

+0

Что значит? У вас есть уровни в столбце 'group', а также в имени фрейма данных –

ответ

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$car или list1[["car"]].

+1

И какой тип списка 'split (max_value_found, max_value_found $ Group)' дает вам? Разве это уже не названо? –

+0

Вы можете оставить ответ «split», чтобы на вопрос был дан ответ. –

+0

Ок, я получаю его, список1 представляет собой массив кадров данных. Есть ли способ разделить их на отдельные кадры данных? кроме того, я думаю, что все будет хорошо. Спасибо – Jazzmine

Смежные вопросы